OmniAuth:防范同一用户的多个帐户

Jim*_*dra 27 ruby-on-rails omniauth

我有几个Rails应用程序,我正在寻求与OmniAuth集成,但我有一个概念性的问题,我想先找出来.请考虑以下情形:

  1. 您的应用程序Foo通过Twitter和Facebook支持OmniAuth登录.
  2. 乔来到您的网站并通过他的Twitter帐户登录.这将在Foo上创建一个新用户并将其与此新Twitter授权相关联.
  3. Joe退出了Foo,并忘记了该网站六个月.
  4. 乔回到Foo,不记得他之前登录过Twitter.
  5. 乔登录Facebook.由于他还没有通过他原来的Twitter授权登录,因此无法检测到他实际上是同一个Joe,并且创建了一个新帐户.
  6. Joe发现了他的旧帐户,现在感到沮丧的是他的旧内容与这个旧帐户绑定,并且他不能互换地使用Twitter和Facebook登录.

由于Twitter不向Foo提供电子邮件地址,因此没有通用标识符可用于检测两个Joes是同一个Joe.您可以决定仅支持向您提供用户电子邮件地址的提供商,但如果用户在不同提供商处注册了不同的电子邮件地址,则无效.

我能想到的唯一其他解决方案是为用户提供一些合并两个现有帐户的方法.与使用OmniAuth时其他一切相对容易相比,这是一个令人头疼的问题.如果这是唯一的解决方案,是否有人遇到指导/教程,展示如何做到这一点的示例?鉴于OmniAuth的受欢迎程度,我对这个问题没有得到更多关注感到惊讶.

谢谢!

小智 7

你的直觉是正确的.您必须为您的用户提供合并工具......或者您可以忽略该问题.

  • 这是怎样的答案?有人发现了一个合适的合并工具吗? (4认同)
  • 因为这是唯一可能的答案吗?您无法阻止用户因意外而获得两个帐户.没有一个合并工具可以知道您的应用程序中要做什么.用于帮助*缓解合并过程的唯一最佳做法是将身份验证标识与应用中的实际用户配置文件分开.这样,您的应用可以允许多个身份验证提供程序链接到单个用户配置文件. (2认同)

小智 6

我知道这是一个老问题,但我想我会回答最近在项目中所做的事情,仅供参考.

完全披露:我没有想出这个,我从网上的其他人那里偷了它.在Omniauth维基上有一篇很好的文章.

我从来没有找到一种很好的方式来自动链接Facebook/Twitter/etc帐户,而是创建它,以便用户可以在他们使用第一个帐户登录后链接多个帐户.

这是场景:

  • 用户使用例如Facebook登录
  • 他们有一个个人资料页面,列出他们附加到帐户的社交网络,以及将每个类型链接到帐户的选项
    • 例如"Facebook链接|链接Twitter |链接谷歌"
  • 例如,"链接Twitter"链接到用户用于登录Twitter的相同的omniauth操作
  • 在回调处理程序中,检查用户是否已登录
    • 如果是,则将提供者和uid存储在用户的单独记录中
    • 否则,照常登录

该模型不是将提供者和uid存储在用户模型上,而是用户可以具有许多社交网络身份.

再次,抱歉让死者复活,但Abe Petrillo对回答接受的回答的评论使我认为另一种观点可能有用.