如何合并来自多个社交登录的相同用户数据。

时间:2013-12-08 04:12:39

标签: ruby-on-rails database-design devise omniauth facebook-login

我正在使用omni-auth,以便用户可以使用Facebook或/和Linkedin进行身份验证。

现在有些用户会使用相同的电子邮件ID进行db,lnkd注册。我的用户表强制该电子邮件对于用户应该是唯一的。

因此,如果已通过一个社交网络注册的用户无法通过其他社交网络登录

我正在使用带有设计和全知识宝石的Rails。

现在使用omni-auth和社交登录:  1]用户没有唯一属性(电子邮件可能是多个等)  2]无法用fb确定同一用户,而且linkedin登录实际上是同一个用户。

轨, 通常将大量用户数据加载到用户对象中,因此如果用户实际上不是用户模型,则使用gem可能会很棘手。

1]如何创建没有单个唯一元素的用户表?

2] Quora,Airbnb等网站如何处理这个问题?

3]似乎是一个非常常见的问题。我能看到的任何宝石?

谢谢!

2 个答案:

答案 0 :(得分:2)

如果您知道不会使用任何其他omniauth- * gems,则可以更改用户表以包含字段facebook_uidlinkedin_uid。否则,您应创建一个包含字段authenticationsuser_idprovider的通用uid表。然后,您可以将用户模型更改为has_many :authentications关系。

这些Railscasts可以帮助您:

但请注意合并帐户/使用不同提供商授予访问同一帐户的安全隐患See here for more information

答案 1 :(得分:0)

您可以使用:

validates :email, :uniqueness => {:scope => :provider}

无需重新设计架构,我也不知道任何问题。

要替换您可以执行的Devise电子邮件索引:

add_index "users", ["email", "provider"], :name => "index_users_on_email_provider", :unique => true