我使用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用户数据。其他一切都回来了。
还有其他人遇到过这个吗?
答案 0 :(得分:2)
为什么在user
区块内使用member
而不是first_or_create
?这是创建代码片段时的拼写错误吗?
无论如何,我认为问题出在数据库中存在的用户身上。在这种情况下,不会评估传递给first_or_create
方法的块(yield仅适用于新记录),因此不会更新字段。
确保您在omniauth-facebook配置中指定了这些字段(或者未指定名称):https://github.com/mkdynamic/omniauth-facebook。它默认返回名称和电子邮件。
你还应该看看伟大的RailsCasts about Facebook Authentication。