如何为同一用户处理多个openID


How to handle multiple openIDs for the same user

对于我的网站,我使用的登录系统很像SO上的登录系统。用户可以使用他的Facebook、Google(Gmail openID)和Twitter帐户登录。

这个问题与特定的oAuth或openID实现无关。

问题是如何知道同一用户是否使用不同的提供商登录。

让我举一个例子:

Bobo 点击"使用Facebook登录"来登录网站。因为这是他的第一次访问,我们为他创建了一个帐户。

稍后Bobo来到网站。这一次,他点击"登录谷歌"。那么,我如何知道这是否是同一个人,这样我就可以将此提供商添加到他的帐户中,而不是创建一个新的(和重复的)帐户。

我可以只通过电子邮件信任吗?

处理这个问题的最佳方法是什么。SO是如何做到的?

有什么想法吗?

编辑: 如果我信任电子邮件,那么同一封电子邮件是否有可能被不同的用户使用?这会是安全问题吗?

我想你不可能真正知道这一点,除非用户再次明确表示它是Bobo。他的FB和Google OpenID身份可能有完全不同的信息(我也是)。只有波波知道这些是同一个人的。

看看SO是如何做到的:你使用OpenID登录,然后你可以将另一个OpenID链接到你的帐户。提示您的用户也这样做。在登录过程中提供一个足够大的"我在这里已经有一个帐户"按钮。

除非两个帐户都提供相同的电子邮件地址,否则您将无法可靠地确定它们都是同一用户。

如果您希望用户能够使用多个oAuth/OpenID帐户登录,您可以提供一种机制,允许用户从其用户帐户添加额外的身份验证。

转到您在该网站上的个人资料,在那里,在您的详细信息上方,您将看到2个链接:编辑|添加openid

通常,您会有1个用户=1个登录详细信息(登录名/密码与其他信息一起存储)。在这种多id的情况下,您必须单独存储登录详细信息(一个用户可能有多个登录id)。DB表之间的简单一对多关系。