Facebookの設定
FacebookのOAuth認証を利用するには、認証を利用するアプリケーションをFacebookのdevサイトに予め登録しておく必要があります。手順は以下の通りです。- アプリを登録してApp IDとSecretを得る
- facebookの開発者サイトにログイン
- 「アプリ」-「 新しいアプリを作成する」で必要項目を入力
- ログイン後のページ遷移ができるようにサイトURLを設定しておく
- 新たに登録したアプリの設定ページで「基本データ」タブを開く
- [Add Platform]を選択し一覧から「ウェブサイト」を選択
- 表示された設定項目中の「サイトURL」に起動するweb appのURLを登録
- ローカルで起動したサーバーを用いて動作確認する際いは以下のURLを設定しておく
- http://localhost:3000/
チュートリアルのコードの変更
まずここを参考にチュートリアルサンプルが動作する環境を整えてください。http://localhost:3000/で"Hello"画面が出ていればOKです。http://localhost:3000/auth/loginにアクセスすると、GoogleEmail/BrowseIdによる認証画面が表示されます。この状態で以下の変更を加えるとFacebook認証を利用することができます。- Foundation.hsの変更
- importに以下のモジュールを追加 以下の3行を追加します。
- authPluginsをFacebookに書き換える 既存のBrowserId, GoogleEmailの宣言をFacebookのものに書き換えます。
- Facebook.Credentialの追加 以下のコードを追加します。前述のFacebookの設定によって得られるApp IDとApp Secretをそれぞれ、Facebook.Credentialの第2、第3引数に指定します。
- Yosog.cabalに依存ライブラリを追加する Yosog.cabalをエディタで開き、build-dependsに以下の3つのライブラリを追加します。
- HomeRの変更(省略可能) Handler/Home.hsのgetHomeRのコードを以下のように編集することで、http://localhost:3000/の挙動をAuthentication and AuthorizationのAuthenticate Meサンプルと同じ挙動にすることができます。
import Yesod.Facebook (YesodFacebook(..))
import Yesod.Auth.Facebook.ServerSide
import Facebook (Credentials(..))
authPlugins _ = [authBrowserId def, authGoogleEmail]
authPlugins _ = [authFacebook ["email"]]
instance YesodFacebook App where
fbCredentials _ = Facebook.Credentials "Yesod FB Auth Sample" "012345678901234" "aaaaaaaabbbbbbbbccccccccdddddddd"
fbHttpManager = httpManager
, yesod-fb
, yesod-auth-fb
, fb
import Yesod.Auth
getHomeR :: Handler Html
getHomeR = do
maid <- lookupSession "_ID"
defaultLayout
[whamlet|
<p>Your current auth ID: #{show maid}
$maybe _ <- maid
<p>
<a href=@{AuthR LogoutR}>Logout
$nothing
<p>
<a href=@{AuthR LoginR}>Go to the login page
|]
動作確認に用いたコードはgithubにアップしました。
0 件のコメント:
コメントを投稿