概要
sorcery https://github.com/Sorcery/sorcery は Rails アプリケーションに認証ロジック機能を付加するgemです。
通常のID/パスワード認証に加え、OAuth 認証も可能です。
問題
facebook の外部プロバイダに :facebook を加えることで facebook での認証が可能ですが、この際にマニュアル通りに以下のscopeを加えても email を取得することができません。
config/initializers/sorcery.rb
config.facebook.access_permissions = %w(email)
原因と解決法
config/initializers/sorcery.rb
config.facebook.access_permissions = %w(email)
config.facebook.user_info_path = 'me?fields=email,id,name'
最近のバージョンのAPIでは fields パラメータを用いて取得する情報を明示的に指定する必要があるため、ユーザー情報取得部分を変更することで、メールアドレスの取得ができます。
参考
2015年7月9日以降にFacebook認証でメールアドレスが取れない問題とその対策
該当のIssue : Facebook Graph API now requires field spec for /me requests #703