저는 Haskell, Yesod 및 Facebook 개발자 API에 초보자입니다. 그럼에도 불구하고 이러한 기술을 사용하여 웹 응용 프로그램을 작성하려고합니다. 내가 구현하려는 첫 번째 기능은 사용자가 Facebook 로그인을 사용하여 내 웹 응용 프로그램에 로그인 할 수 있어야하며 고유 한 사용자 ID와 이메일 주소를 모두 얻어야한다는 것입니다.yesod-auth-fb를 사용하여 Facebook 로그인에서 사용자의 전자 메일 주소를 얻으려면 어떻게해야합니까?
여기 내 코드가 있습니다. 이 코드는 http://www.yesodweb.com/book/authentication-and-authorization에서 찾을 수있는 코드와 거의 같습니다. 내가 바꾼 유일한 것은 BrowserID에서 Facebook 로그인 인증으로 전환하여 "이메일"권한을 요청하는 것이 었습니다. 나는이 프로그램을 실행할 때
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE QuasiQuotes #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE TypeFamilies #-}
import Data.Default (def)
import Data.Text
import Network.HTTP.Conduit (Manager, newManager)
import qualified Facebook as FB
import Yesod
import Yesod.Auth
import Yesod.Facebook (YesodFacebook(..))
import Yesod.Auth.Facebook.ServerSide
data App = App
{ httpManager :: Manager
}
mkYesod "App" [parseRoutes|
/HomeR GET
/auth AuthR Auth getAuth
|]
instance Yesod App where
approot = ApprootStatic "<my server url>"
instance YesodAuth App where
type AuthId App = Text
getAuthId = return . Just . credsIdent
loginDest _ = HomeR
logoutDest _ = HomeR
authPlugins _ =
[ authFacebook ["email"]
]
authHttpManager = httpManager
maybeAuthId = lookupSession "_ID"
instance YesodFacebook App where
fbCredentials _ = FB.Credentials "<my app>" "<my app id>" "<my secret>"
fbHttpManager = httpManager
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 [email protected]{AuthR LogoutR}>Logout
$nothing
<p>
<a [email protected]{AuthR LoginR}>Go to the login page
|]
main :: IO()
main = do
man <- newManager def
warpEnv $ App man
, 그것은 작동합니다 - 나는 및 로그 아웃 내 이메일 주소에 대한 액세스 권한을 부여하고있어 페이스 북의 로그인 페이지 상태, 나는 다시 제대로 사용자 ID를 얻을 수 있습니다. 여태까지는 그런대로 잘됐다.
그러나 나는 로그인있어 일단 실제로 사용자의 이메일 주소를 얻는 방법을 알아낼 수 없습니다.
사람은 몇 가지 지침을 제공 할 수 있습니까?
감사합니다.