当同一用户有多个跨提供商帐户时,如何在我的网站上使用 X 登录?



如果我有一个可以使用多个不同提供商(比如Facebook,GitHub,Google(登录的网站,我应该使用什么作为用户的本地到我的网站的唯一标识符?例如,如果发生了以下两个步骤:

  1. 我使用 GitHub 登录(第一次(,我的用户名是莫罗那洛尔,电子邮件是 mogronalol@mogronalol.com。
  2. 将创建一个电子邮件地址为 mogronalol@mogronalol.com 且用户名为 mogronalol 的本地到我的站点帐户。

如果我使用电子邮件地址作为本地唯一标识符,如果我的电子邮件地址在 GitHub 中更改为 other@other.com,会发生什么情况?同样的问题也适用于更改用户名。

如果我从 GitHub 获得某种唯一 ID,并将其用作标识符,那么如果我的电子邮件地址或用户名在 GitHub 中发生更改,我该怎么办。我是否只是在每次登录时将我的本地到我的站点副本更新为与 GitHub 上的副本相同?

当然,如果我想使用我的Facebook帐户和GitHub帐户登录,这个问题会恶化。如果我的电子邮件地址和/或用户名在这两个方面不同,会发生什么情况?我的本地网站如何知道将帐户链接在一起?如果帐户链接后电子邮件地址之类的内容不同,我应该使用哪一个?

首先,也许你可以尝试一些教程来感受OAuth是如何工作的。

在您的 OAuth 身份验证成功后,您的网站将收到 OAuth 提供商提供的一系列信息。

在此信息中,有两个特殊列称为uidprovider用于识别来自 OAuth 提供程序的用户。

您将使用这两列来判断身份验证来自哪个提供程序(即facebookgithub(,您还需要将这些字段保存到您的帐户列中。

然后使用其余信息在您的网站中创建帐户。

例如,使用 OAuth 提供商的电子邮件作为email(github 的电子邮件作为电子邮件(。

创建帐户后,每次从OAuth提供商登录服务器时。

您只需要在帐户列中检查provideruid

让我们回到你的问题。

如果我

使用电子邮件地址作为本地唯一标识符,如果我的电子邮件地址在 GitHub 中更改为 other@other.com,会发生什么情况?同样的问题也适用于更改用户名。

如果我从 GitHub 获得某种唯一 ID,并将其用作标识符,那么如果我的电子邮件地址或用户名在 GitHub 中发生更改,我该怎么办。我是否只是在每次登录时将我的本地到我的站点副本更新为与 GitHub 上的副本相同?

Github的电子邮件或用户更改不会影响您的登录(我们只检查登录用户的provideruid字段(。

我建议不要与您的OAuth提供商的信息同步(我们仅在创建帐户时使用OAuth提供商的信息(。

如果您要支持多个 OAuth 提供程序,我建议您通读本文。

您必须将uidprovider分隔到另一个称为标识的表。

每个帐户都有许多标识。

我以前也做过。

如果您不介意,这里是处理多个 OAuth 提供程序的示例代码片段。

您必须考虑登录流程中的逻辑。

例如,用户已登录并登录 OAuth => 将帐户与 OAuth 提供程序链接

用户未登录并登录 OAuth => 如果使用 OAuth 找到用户,请登录,否则使用 OAuth 提供商的信息创建帐户

当然,如果我想使用我的Facebook帐户和GitHub帐户登录,这个问题会恶化。如果我的电子邮件地址和/或用户名在这两个方面不同,会发生什么情况?我的本地网站如何知道将帐户链接在一起?如果帐户链接后电子邮件地址之类的内容不同,我应该使用哪一个?

我们仅在用户已登录时关联帐户。

当您关联帐户时,您可以决定使用OAuth提供商的信息来更新帐户(就像您以前注册帐户一样(。

我建议使用原始电子邮件,不要从OAuth提供商的信息中更新它。

最新更新