如何将Facebook用户数据转换为数据库中的记录?

时间:2016-07-30 01:13:16

标签: ruby-on-rails facebook oauth devise facebook-login

我使用omniauth-facebook gem与devise在我的网站上设置Facebook登录。我将Facebook用户数据导入我的数据库,但我遇到了一些奇怪的问题。

这是我用于导入数据的方法:

#User.rb

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

我回来的记录的user.username等于Facebook电子邮件,user.email为零。 auth.info.name(实际上是电子邮件地址)是我实际能够恢复的唯一一部分Facebook用户数据。其他一切都回来了。

还有其他人遇到过这个吗?

1 个答案:

答案 0 :(得分:2)

为什么在user区块内使用member而不是first_or_create?这是创建代码片段时的拼写错误吗?

无论如何,我认为问题出在数据库中存在的用户身上。在这种情况下,不会评估传递给first_or_create方法的块(yield仅适用于新记录),因此不会更新字段。

确保您在omniauth-facebook配置中指定了这些字段(或者未指定名称):https://github.com/mkdynamic/omniauth-facebook。它默认返回名称和电子邮件。

你还应该看看伟大的RailsCasts about Facebook Authentication