如果我有一个可以与多个不同的提供商(比如Facebook、GitHub、Google)登录的网站,我应该使用什么作为用户本地到我的站点的唯一标识符?例如,如果发生了这两个步骤:
如果我使用电子邮件地址作为本地唯一标识符,如果我的电子邮件地址在GitHub中更改为other@other.com会发生什么?同样的问题也适用于更改用户名。
如果我从GitHub获得了某种唯一的ID,并使用它作为标识符,那么如果我的电子邮件地址或用户名在GitHub中发生了变化,我该怎么办?我是否只是在每次登录时更新本地到我的站点副本,使其与GitHub上的副本相同?
当然,如果我想登录我的Facebook帐户以及我的GitHub帐户,这个问题会更加严重。如果我的电子邮件地址和/或用户名在这两种情况下是不同的,会发生什么?我的本地网站如何知道如何将账户连接在一起?如果电子邮件地址是不同的,一旦帐户被连接,我应该使用哪一个?
发布于 2017-08-15 22:23:11
首先,也许您可以尝试一些教程来体验OAuth的工作方式。
在您的OAuth身份验证成功后,您的网站将收到OAuth提供者提供的一系列信息.示例
在这些信息中,有两个名为uid和provider的特殊列,用于从OAuth提供程序中识别用户。
您将使用这两列来判断身份验证来自哪个提供者(即facebook或github),还需要将这些字段保存到您的帐户列中。
然后使用其余的信息在您的网站上创建帐户。
例如,使用OAuth提供者的电子邮件作为email(github的电子邮件作为电子邮件)。
创建帐户后,每次从OAuth提供程序登录服务器时。
您只需要在account列中检查provider和uid。
让我们回到你的问题。
如果我使用电子邮件地址作为本地唯一标识符,如果我的电子邮件地址在GitHub中更改为other@other.com会发生什么?同样的问题也适用于更改用户名。 如果我从GitHub获得了某种唯一的ID,并使用它作为标识符,那么如果我的电子邮件地址或用户名在GitHub中发生了变化,我该怎么办?我是否只是在每次登录时更新本地到我的站点副本,使其与GitHub上的副本相同?
Github的电子邮件或用户更改不会影响您的登录(我们只检查provider和uid字段来登录用户)。
我建议不要与OAuth提供程序的信息同步(我们只在创建帐户时使用OAuth提供程序的信息)。
如果要支持多个OAuth提供程序,我建议您阅读这篇文章。
您必须将uid和provider分离到另一个称为identity的表中。
每个帐户都有许多身份。
我以前也这么做过。
如果您不介意的话,这里是处理多个OAuth提供程序的示例代码片段。
您必须考虑登录流中的逻辑。
例如,用户已登录并使用OAuth =>链接提供程序登录OAuth链接帐户。
用户未登录并登录OAuth =>,如果找到带有OAuth的用户,则登录,否则使用OAuth提供程序的信息创建帐户
当然,如果我想登录我的Facebook帐户以及我的GitHub帐户,这个问题会更加严重。如果我的电子邮件地址和/或用户名在这两种情况下是不同的,会发生什么?我的本地网站如何知道如何将账户连接在一起?如果电子邮件地址是不同的,一旦帐户被连接,我应该使用哪一个?
当用户已经登录时,我们只链接帐户。
链接帐户时,可以确定使用OAuth提供程序的信息更新帐户(就像以前注册帐户一样)。
我建议使用原始电子邮件,不要从OAuth供应商的信息更新它。
https://stackoverflow.com/questions/45701216
复制相似问题