2013-12-22 3 views
3

저는 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를 얻을 수 있습니다. 여태까지는 그런대로 잘됐다.

그러나 나는 로그인있어 일단 실제로 사용자의 이메일 주소를 얻는 방법을 알아낼 수 없습니다.

사람은 몇 가지 지침을 제공 할 수 있습니까?

감사합니다.

답변

0

페이스 북 API를 사용하기 전에 필자는 페이스 북 API 요청을 보내기 위해 사용하는 액세스 토큰을 기억하고있다. 로그인 한 사용자의 전자 메일 주소를 얻으려면 아마 fields 인수와 함께 사용자 정보를 가져 오기 위해 HTTP 요청 (또는 Facebook API 라이브러리 사용)을 보내야합니다. 더 자세한 내용 here.