yesod-auth-fb

Authentication backend for Yesod using Facebook.

https://github.com/psibi/yesod-auth-fb

Version on this page:1.9.0
LTS Haskell 16.31:1.10.1
Stackage Nightly 2022-02-07:1.10.1
Latest on Hackage:1.10.1

See all snapshots yesod-auth-fb appears in

BSD-3-Clause licensed by Felipe Lessa, Michael Snoyman
Maintained by Sibi
This version can be pinned in stack with:yesod-auth-fb-1.9.0@sha256:7c2840639a20ad885bfb95b4e6c6a2f94d78caca5097c21cf0b751dd72b255ca,2617

Module documentation for 1.9.0

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

Changes

Version 1.9.0

  • Supports conduit >= 1.3.0
  • Documentation updated to include demo code.
  • Supports latest yesod >= 1.6.0.
  • Remove dependency on lifted-base and related ecosystem.