用户接受使用他的 facebook 帐户登录后,我的应用程序回调将被 facebook 调用,我注意到 facebook 没有检索用户电子邮件,尽管在omniauth 的配置中,我已经在权限列表中列出了电子邮件,例如这个:
Rails.application.config.middleware.use OmniAuth::Builder do
provider :facebook, omniauth_app_id, omniauth_app_secret_id,
:scope => 'email,user_birthday,read_stream', :display => 'popup'
end
我期待在request.env['omniauth.auth']['extra']['raw_info']['email']
或中找到电子邮件request.env['omniauth.auth']['info']['raw_info']['email']
但是,它不存在......事实上,它不在request
对象内的任何属性中!
任何想法 ?它与我的应用程序 facebook 设置有关吗?
编辑
以下是 Facebook 的回调结果:
puts auth.inspect
#<OmniAuth::AuthHash credentials=#<Hashie::Mash expires=true expires_at=1353164400 token="***"> extra=#<Hashie::Mash raw_info=#<Hashie::Mash first_name="***" id="***" last_name="***" link="***" locale="ar_AR" name="***" timezone=2 updated_time="2012-11-17T13:01:59+0000" username="***" verified=true>> info=#<OmniAuth::AuthHash::InfoHash first_name="***" image="***" last_name="***" name="***" nickname="***" urls=#<Hashie::Mash Facebook="***"> verified=true> provider="facebook" uid="***">
我已经用*替换了真实数据,但是,您可以看到电子邮件数据丢失了..
编辑2
这是我在 Gemfile gem 'devise' 中使用的宝石
gem 'omniauth'
gem 'omniauth-facebook', '1.4.0'
gem 'oauth2'