我正在使用omni-auth,以便用户可以使用Facebook或/和Linkedin进行身份验证。
现在有些用户会使用相同的电子邮件ID进行db,lnkd注册。我的用户表强制该电子邮件对于用户应该是唯一的。
因此,如果已通过一个社交网络注册的用户无法通过其他社交网络登录
我正在使用带有设计和全知识宝石的Rails。
现在使用omni-auth和社交登录: 1]用户没有唯一属性(电子邮件可能是多个等) 2]无法用fb确定同一用户,而且linkedin登录实际上是同一个用户。
轨, 通常将大量用户数据加载到用户对象中,因此如果用户实际上不是用户模型,则使用gem可能会很棘手。
1]如何创建没有单个唯一元素的用户表?
2] Quora,Airbnb等网站如何处理这个问题?
3]似乎是一个非常常见的问题。我能看到的任何宝石?
谢谢!
答案 0 :(得分:2)
如果您知道不会使用任何其他omniauth- * gems,则可以更改用户表以包含字段facebook_uid
和linkedin_uid
。否则,您应创建一个包含字段authentications
,user_id
和provider
的通用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