0

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

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

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

我已经尝试过其他教程,所有教程都一样,电子邮件为空。

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

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
4

2 回答 2

0

api 于 7 月 8 日更改。

这做到了:

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

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

于 2015-07-13T22:23:02.370 回答
0

您能否通过使用检查参数

raise params.inspect

在回调页面操作时,facebook 说应用程序正在共享用户的电子邮件。它将 json 数据从其系统发送到您的回调 url。

于 2015-07-13T17:56:27.007 回答