Railsでomniauth-facebookを使用したOAuthでFacebookユーザーの情報を取得するまでのメモ。
#Facebook for developers
Facebook for developersでデベロッパ登録して、さらにアプリを登録する。
その際の注意点として、「アプリドメイン」と「有効なOAuthリダイレクトURI」をちゃんと設定しておかないとOAuth実行時に「このURLのドメインはアプリのドメインに含まれていません。このURLを読み込むには、アプリ設定のアプリドメインにすべてのドメインとサブドメインを追加してください。」なんて文言のエラーが出て失敗します。
「アプリドメイン」は普通にアプリのドメイン(https://www.アプリ名.com等)
「有効なOAuthリダイレクトURI」はOAuthの結果がCBされるURI(omniauth-facebookの場合はhttps://www.アプリ名.com/auth/facebook/callback)
#omniauth-facebookのインストール
Gemfileに「gem 'omniauth-facebook'」を追記して
$ bundle install
#omniauth-facebookを設定
config/initializers/omniauth.rbを作成して↓を記載。
Rails.application.config.middleware.use OmniAuth::Builder do
provider :facebook, ENV['FACEBOOK_KEY'], ENV['FACEBOOK_SECRET'],
scope: 'email', display: 'popup', local: 'ja_JP', info_fields: "id, name, gender"
end
FACEBOOK_KEY、FACEBOOK_SECRETはFacebookにアプリを登録した時の情報を記載。
scope等の詳細はomniauth-facebookのサイトに記載あり。
#routesを設定
OAuthした結果がCallbackされるURLのroutesを設定しておく。
get '/auth/facebook/callback', to: 'facebook#auth_done'
#コントローラーを作成
Callback先を作成。
def auth_done
facebook_id = request.env['omniauth.auth']['extra']['raw_info']['id']
name = request.env['omniauth.auth']['extra']['raw_info']['name']
gender = request.env['omniauth.auth']['extra']['raw_info']['gender']
redirect_to :root
end
#OAuthをトリガする
Facebookボタン等をアプリに配置してユーザーが押した際に「/auth/facebook」に飛ばすとFacebookのサインイン画面が表示される。
#Callbackが来る
ユーザーが正常にサインインしてくれた場合作成したfacebook_controllerのメソッドが実行され晴れてユーザーの情報が取得出来る。
#参考
https://github.com/mkdynamic/omniauth-facebook
https://github.com/omniauth/omniauth
https://developers.facebook.com/docs/facebook-login