在Rails 4应用程序中从Facebook登录检索电子邮件

时间:2015-07-13 17:27:00

标签: ruby-on-rails ruby facebook devise omniauth-facebook

我正在尝试使用devise和omniauth-facebook gem创建一个使用Facebook登录的Rails 4应用程序。

我遵循了本教程https://www.digitalocean.com/community/tutorials/how-to-configure-devise-and-omniauth-for-your-rails-application

现在,我可以将用户保存在数据库中,但电子邮件将变为空。

我已经尝试了另一个教程,所有这些教程都是相同的,电子邮件为null。

我注意到当我点击“登录”按钮时,我收到以下链接:

https://www.facebook.com/login.php?skip_api_login=1&api_key=1452548131713566&signed_next=1&next=https%3A%2F%2Fwww.facebook.com%2Fv2.4%2Fdialog%2Foauth%3Fredirect_uri%3Dhttp%253A%252F%252Flocalhost%253A3000%252Fusers%252Fauth%252Ffacebook%252Fcallback%26state%3Db9cfa351943875b105b0b9206a5de31d6fbed43cda4a59d3%26scope%3Demail%26response_type%3Dcode%26client_id%3D1452548131713566%26ret%3Dlogin&cancel_url=http%3A%2F%2Flocalhost%3A3000%2Fusers%2Fauth%2Ffacebook%2Fcallback%3Ferror%3Daccess_denied%26error_code%3D200%26error_description%3DPermissions%2Berror%26error_reason%3Duser_denied%26state%3Db9cfa351943875b105b0b9206a5de31d6fbed43cda4a59d3%23_%3D_&display=page

这似乎是一个权限错误,但我似乎无法弄清楚原因。

这是self.from_omniauth方法:

def self.from_omniauth(auth)
     where(provider: auth.provider, uid: auth.uid).first_or_create do |user|
       user.provider = auth.provider
       user.uid = auth.uid
       user.name = auth.info.name
       user.email = auth.info.email
       user.password = Devise.friendly_token[0,20]
     end
  end

2 个答案:

答案 0 :(得分:0)

请你使用

检查参数
raise params.inspect

在回调页面操作时,facebook说app正在分享用户的电子邮件。它将json数据从其系统发送到你的回调网址。

答案 1 :(得分:0)

api在7月8日发生了变化。

这样做了:

config.omniauth :facebook, "appid", "appsecret", scope: 'email', info_fields: 'email'

https://developers.facebook.com/docs/apps/changelog#v2_4