yesod-auth-fb: Authentication backend for Yesod using Facebook.

[ bsd3, library, web ] [ Propose Tags ]

This package allows you to use Yesod's authentication framework with Facebook as your backend. That is, your site's users will log in to your site through Facebook. Your application need to be registered on Facebook.

This package works with both the server-side authentication flow (https://developers.facebook.com/docs/authentication/server-side/) via the Yesod.Auth.Facebook.ServerSide module and the client-side authentication (https://developers.facebook.com/docs/authentication/client-side/) via the Yesod.Auth.Facebook.ClientSide module. It's up to you to decide which one to use. The server-side code is older and as such has been through a lot more testing than the client-side code. Also, for now only the server-side code is able to work with other authentication plugins. The client-side code, however, allows you to use some features that are available only to the Facebook JS SDK (such as automatically logging your users in, see https://developers.facebook.com/blog/post/2012/05/08/how-to--improve-the-experience-for-returning-users/).


[Skip to Readme]
Versions 0.0, 0.10, 0.10.1, 0.10.2, 1.0.0, 1.0.1, 1.0.2, 1.0.3, 1.0.4, 1.0.5, 1.0.6, 1.1, 1.2, 1.2.1, 1.2.2, 1.2.3, 1.3, 1.3.1, 1.3.2, 1.4, 1.5, 1.5.1, 1.6, 1.6.1, 1.6.2, 1.6.2.1, 1.6.3, 1.6.4, 1.6.5, 1.6.6, 1.7, 1.8.0, 1.8.1, 1.9.0, 1.9.1
Change log CHANGELOG.md
Dependencies aeson (>=0.6), base (>=4.9.0 && <5), bytestring (>=0.9 && <0.11), conduit (>=1.3.0), fb (>=1.2.0), http-conduit (>=1.9), resourcet (>=1.2.0), shakespeare (>=2.0), text (>=0.7 && <1.3), time (>=1.0 && <1.9), transformers (>=0.1.3 && <0.6), unliftio, wai, yesod-auth (>=1.6.1), yesod-core (>=1.6.1), yesod-fb (>=0.5.0) [details]
License BSD-3-Clause
Author Felipe Lessa, Michael Snoyman
Maintainer Sibi <sibi@psibi.in>
Category Web
Home page https://github.com/psibi/yesod-auth-fb
Source repo head: git clone git@github.com:psibi/yesod-auth-fb.git
Uploaded by psibi at Mon Oct 1 06:23:57 UTC 2018
Distributions LTSHaskell:1.9.1, NixOS:1.9.1
Downloads 10979 total (109 in the last 30 days)
Rating (no votes yet) [estimated by rule of succession]
Your Rating
  • λ
  • λ
  • λ
Status Docs available [build log]
Last success reported on 2018-10-01 [all 1 reports]
Hackage Matrix CI

Modules

[Index] [Quick Jump]

Downloads

Maintainer's Corner

For package maintainers and hackage trustees


Readme for yesod-auth-fb-1.9.1

[back to package description]

yesod-auth-fb

Build Status

Authentication backend for Yesod using Facebook

Demo

Sample code showing Facebook authentication in action:

{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE QuasiQuotes #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE OverloadedStrings #-}

import Data.Text (Text)
import Yesod
import Yesod.Auth
import Yesod.Facebook
import Yesod.Auth.Facebook.ServerSide
import Facebook (Credentials(..))

fbclientId :: Text
fbclientId = "sample_fb_client_id"

fbclientSecret :: Text
fbclientSecret = "sample_fb_secret"

data App =
  App

mkYesod
  "App"
  [parseRoutes|
/ HomeR GET
/auth AuthR Auth getAuth
|]

instance Yesod App where
  approot = ApprootStatic "http://localhost:3000"

instance YesodFacebook App where
  fbCredentials _ = Credentials "yesod" fbclientId fbclientSecret

instance YesodAuth App where
  type AuthId App = Text
  getAuthId = return . Just . credsIdent
  loginDest _ = HomeR
  logoutDest _ = HomeR
  authPlugins _ = [authFacebook ["user_about_me", "email"]]
  -- The default maybeAuthId assumes a Persistent database. We're going for a
  -- simpler AuthId, so we'll just do a direct lookup in the session.
  maybeAuthId = lookupSession "_ID"

instance RenderMessage App FormMessage where
  renderMessage _ _ = defaultFormMessage

getHomeR :: Handler Html
getHomeR = do
  maid <- maybeAuthId
  defaultLayout
    [whamlet|
            <p>Your current auth ID: #{show maid}
            $maybe _ <- maid
                <p>
                    <a href=@{AuthR LogoutR}>Logout
                    <a href=@{AuthR facebookLogout}>Facebook logout
            $nothing
                <p>
                    <a href=@{AuthR LoginR}>Go to the login page
        |]

main :: IO ()
main = warp 3000 App