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

Facebook 用于合并多个帐户和注册用户帐户的体系结构,facebook,security,architecture,oauth,multiple-login,Facebook,Security,Architecture,Oauth,Multiple Login,我的问题与此几乎相同 唯一的区别是,用户可以选择注册(提供用户名和密码)。如果用户拥有相同的电子邮件帐户,则用户应该只注册一个帐户。我的应用程序还有另一种登录方法,那就是通过Facebook 我基本上做的是 当用户第一次访问for站点时,他或她 获取创建的用户帐户,其中该帐户只有用户名、密码和密码 以及创建第三方身份记录后的邮件地址 然后与本地帐户配对。但是用户表将 用户名和密码为空,但电子邮件将被填充 使用我们从第三方检索到的用户电子邮件 服务提供商 第二种情况呢 用户尝试注册到该站点。

我的问题与此几乎相同

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

我基本上做的是

  • 当用户第一次访问for站点时,他或她 获取创建的用户帐户,其中该帐户只有用户名、密码和密码 以及创建第三方身份记录后的邮件地址 然后与本地帐户配对。但是用户表将 用户名和密码为空,但电子邮件将被填充 使用我们从第三方检索到的用户电子邮件 服务提供商
第二种情况呢

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

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

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

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

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

注销时,您必须使用现有凭据登录。如果在注销时,您尝试使用现有电子邮件地址创建帐户,则您可以阻止登录,说“已存在具有该电子邮件地址的帐户”,或者立即向用户发出请求,要求其登录以合并该帐户(在这种情况下,它的工作原理与链接外部帐户时登录的情况类似,只是身份验证操作的顺序颠倒了)


如果上面不清楚,我建议使用一个用户帐户,并记录该帐户与外部帐户之间的链接。您可以在NoSQL buy中这样做,只需将字段添加到用户文档中,也可以通过使用一个表示外部帐户的表,用一个外键将它们链接到用户来实现r ID.

注意不要使用oAuth 2.0! 这是因为它没有1.0版本那么安全

您应该更喜欢oAuth 1.0或OpenID


你还可以看看

你想实现的是类似OpenID的功能吗?@Charles EdouardCoste是的,这就是我想做的。在twitter上,他们不提供电子邮件。你知道如何合并twitter和其他oauth帐户吗?@cmcdragokai,你的选择是禁止使用twitter创建帐户(只能在以其他方式登录后添加),强制新的Twitter用户在注册流程中提供和发送电子邮件地址,或冒Twitter用户创建意外重复帐户的风险。您能告诉我如何识别唯一的Twitter用户吗?通过他们的名字?这似乎是我唯一可以使用的唯一标识符。我的意思是,如果相同的Twitter用户再次登录。@cmcdragokai,Twitter句柄(他们的
@name
)是唯一的,因为你就是这样跟随他们的。Twitter还提供了一个唯一的数字ID。数字ID更好,因为一个人可以更改他们的Twitter句柄,但ID号会保持不变。@jan,它是你构建它的任何东西。如果它是(受管制的)银行应用程序您需要提供完整的审计跟踪;您可能会创建一个全新的(第三个)帐户。在最简单的情况下,您只需在整个数据库中替换用户ID。您可以了解StackExchange如何以中等复杂度处理合并重复帐户的问题。