用于合并多个帐户和注册用户帐户的体系结构



我的问题和这个差不多

唯一的区别是用户有一个注册选项(提供他的用户名和密码)。用户应该只注册一个帐户,如果用户有相同的电子邮件,我合并这些帐户。我的应用程序有另一种登录方法,那就是通过Facebook。

我所做的就是

  • 当用户第一次访问for站点时,他或她然后创建一个用户帐户,它只有用户名和密码以及第三方身份记录创建后的邮件地址然后和本地账户配对。但是Users表会有一个空的用户名和密码,但电子邮件将被填写使用我们从第三方检索到的用户电子邮件服务提供者

和第二种情况

  • 用户尝试注册到站点。检查是否存在电子邮件电子邮件存在,但它是使用第三方帐户注册的用户填充表单并将其插入到配对的用户帐户中与第三方帐户,简而言之,如果用户的电子邮件存在于数据库I只是将本地创建的账户和第三方合并吗帐户。

现在我的问题是我的方法安全可靠吗?如果不是,合并帐户的最好方法是什么?同时,如果用户注册相同的电子邮件(来自第三方帐户的一个),他有一个第三方帐户,这些帐户将被合并?

在我看来,只有一个帐户。一封电子邮件,一个账户周期。可能有各种属性与该帐户相关联,例如链接到一组OAuth凭据等。但基本上只有一个说法。如果你的用户使用社交账户注册过一次,然后试图在你的网站上再次注册,把他们送到他们第一次注册的社交网站,并要求他们登录。然后将它们自动登录到您的站点。如果用户在你的网站上有一个帐户,然后试图用一个社交帐户再次注册,告诉他们你已经在网站上有一个帐户,并要求他们登录。恕我直言,保持单独的帐户并试图合并它们是一个混乱的想法。

我将提供两组行为,一组在登录时,另一组在注销时。

登录时,您提供链接到新的第三方帐户的能力。例如,你用电子邮件地址和密码注册,然后登录,然后你可以链接你的Facebook帐户。链接您的Facebook帐户与Facebook授权,然后将Facebook信息存储在该用户帐户记录。

登出时,必须使用现有凭据登录。如果,当注销时,您尝试用现有的电子邮件地址创建一个帐户,您要么阻止登录,说"具有该电子邮件地址的帐户已经存在",要么立即挑战用户登录以合并帐户(在这种情况下,它的工作原理类似于链接外部帐户时登录的情况,只是身份验证操作的顺序相反)。

如果从上面看不清楚,我建议使用单个用户帐户和记录该帐户与外部帐户之间的链接的方法。在NoSQL中,您可以通过向用户文档中添加字段来实现这一点,也可以通过使用一个外键将外部帐户链接到用户ID的表来实现这一点。

注意不要使用oAuth 2.0 !主要作者自己辞职了,因为它不如1.0版本安全。

您应该选择oAuth 1.0或OpenID。

你也可以看看来自Mozilla的Persona

最新更新