継続的ブログ

主にweb系の技術について書いています

Devise&OmniauthでFacebook認証したいけど、emailがnilで返ってきてハマった

追記
gemのアップデートで取れるようになりそうですね!
omniauth-facebook+GraphAPI ver 2.4でemailフィールドが取得されない件の対応 - Qiita

Railsで作っているサービスで、DeviseとOmniauthを使って認証系実装している時にちょっとハマったお話。

FacebookではEメールが普通に取得できるはずでは?

Twitterでは入ってこないが、Facebookでは下記のようにすればEメールが取得できるはず。

user.email = auth.info.email

しかし、nilで返ってくる。
auth.infoの中身を見ても、そもそもemailがない。

FacebookAPIが2.4にアップデートされたことが原因

OmniAuth: Overview · plataformatec/devise Wiki · GitHub

ここに書いてありました。

config.omniauth :facebook, "APP_ID", "APP_SECRET", scope: 'email', info_fields: 'email, name'

こう書けば取れるようになりました。