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

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

我正在使用全方位身份验证,以便用户可以使用 Facebook 或/和 Linkedin 进行身份验证。

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

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

我正在将 Rails 与 devise 和omni-auth gems 结合使用。

现在有了全方位身份验证和社交登录: 1]用户没有唯一的属性(电子邮件可以是多个等) 2] 无法确定 fb 和 linkedin 登录的同一用户实际上是同一用户。

rails , 一般来说,会将大量用户数据加载到用户对象中,因此如果用户实际上不是用户模型,那么使用 gem 可能会很棘手。

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

2] Quora、Airbnb 等网站如何处理此问题?

3] 似乎是一个非常常见的问题。有什么 gem 我可以看看吗?

谢谢!

最佳答案

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

这些 Railscast 应该可以帮助您:

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

关于ruby-on-rails - 如何合并来自多个社交登录的相同用户数据。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20449805/

相关文章:

ruby-on-rails - 设计和 Rspec - 未定义的方法 `authenticate!' 为 nil :NilClass

ruby-on-rails - 您会为 rails/grails 应用程序推荐什么建模技术/工具/图表?

ruby-on-rails - 在 Ruby on Rails 上 curl

ruby-on-rails - 如何运行 GenieACS?

mysql - 数据库设计: need composite key + foreign key

sql - 如何使用SQLite数据库设计“上周播放次数最多”排名?

ruby-on-rails - Gemfile 中未使用的 gem 会占用 Rails 中的内存吗?

数据库设计——应该避免一对一关系吗?

ruby-on-rails - Rails 中的唯一 session ID

ruby-on-rails - 如何使用 rspec 测试设计 View