Rails
sorcery

sorcery の external モジュールで facebook の OAuth 認証においてメールアドレスが取得できない場合の対応

More than 1 year has passed since last update.

概要

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