好的,我有一个网站,您可以在其中注册并登录。您也可以使用您的 facebook、twitter 或linkedin 帐户登录。
用户只能注册一个帐户,这一点很重要。所以不知何故,如果用户使用不同的方法登录,我想合并用户的帐户。解决此问题的最佳解决方案是什么?
例如,用户使用他的 Facebook 帐户登录。我使用这些数据自动为他注册了一个帐户。我应该发送一封包含我们网站用户名和密码的电子邮件吗?(如果这符合 Facebook 的政策)。我应该给他们第二个屏幕,让他们可以填写用户名和密码吗?但这不是使用您的 Facebook 帐户登录背后的想法。它应该简化您的参与程序。
用户也有可能已经在我们的网站上注册了自己,并且下次他使用他的 Twitter 帐户登录时。如何将这两个帐户合并为一个?最好的方法是什么?
所以基本上我的问题是:我有 4 种不同的方式让用户成为我们网站的成员。如果用户决定使用多种方式,我如何确保所有这 4 种方式只创建一个帐户?确保不会给用户自己带来麻烦的最佳流程是什么?
编辑:
在我提出这个问题 3 年后,我自己在一系列文章中给出了答案: https ://www.peternijssen.nl/social-network- authentication-setup/ https://www.peternijssen.nl/social-网络身份验证-google/ https://www.peternijssen.nl/social-network-authentication-merging-accounts/ https://www.peternijssen.nl/social-network-authentication-twitter- facebook/
我现在面临着完全相同的任务。我制定的设计相当简单,但效果很好。
核心思想是本地站点身份和第三方站点身份的模型保持隔离,但稍后链接。因此,每个登录网站的用户都有一个本地身份,该身份映射到任意数量的第三方网站身份。
本地身份记录包含最少的信息——它甚至可以是一个字段——只是一个主键。(对于我的应用程序,我不关心用户的电子邮件、姓名或出生日期——我只想知道他们是一直登录此帐户的人。)
第三方身份包含仅与第三方身份验证相关的信息。对于 OAuth,这通常意味着用户标识符(如 id、电子邮件或用户名)和服务标识符(指示哪个站点或服务已通过身份验证)。在数据库之外的应用程序的其他部分,该服务标识符与用于从该服务检索相关用户标识符的方法配对,这就是执行身份验证的方式。对于 OpenID,我们采用相同的方法,只是身份验证的方法更加通用(因为我们几乎总是可以执行完全相同的协议——除了我们使用不同的身份 URL,这就是我们的服务标识符)。
最后,我记录了哪些第三方身份与哪些本地身份配对。要生成这些记录,流程如下所示:
合并帐户是合并本地身份的每个单独字段(这会因应用程序而异,如果您的本地身份记录中只有几个字段应该很容易),然后确保链接的第三方身份与由此产生的本地身份相关联。