2017-08-15 79 views
0

如果我有一个可以与多个不同供应商(说Facebook,GitHub,Google)签约的网站,我用什么作为用户的本地到我的网站唯一标识符?例如,如果这两个步骤发生:如何在我的网站上使用X登录,当同一用户有多个提供商的帐户时?

  1. 我的GitHub登录(第一次)和我的用户名是mogronalol和电子邮件是[email protected]
  2. 一个本地到我的网站帐户的电子邮件地址为[email protected],用户名为mogronalol。

如果我使用的电子邮件地址作为本地唯一的标识符,如果在GitHub上我的电子邮件地址更改为[email protected]会发生什么?同样的问题也适用于更改用户名。

如果我得到了某种从GitHub唯一的ID,并用作为标识符,那么我该怎么办,如果我的电子邮件地址或用户名GitHub的变化。每次登录时,我是否只更新了本地到我的站点副本与GitHub上的一样?

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

回答

1

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

后您的OAuth认证成功,您的网站将收到的一系列的OAuth提供者提供的信息。 example

在此信息中,有两个专门名称uidprovider用于从OAuth提供商识别用户。

您将使用这两列来告诉哪个提供者身份验证来自(即facebookgithub),您还需要将这些字段保存到您的帐户列。

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

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

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

你只需要检查provideruid在账户栏。

让我们回到你的问题。

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

如果我得到了某种从GitHub唯一的ID,并用作为标识符,那么我该怎么办,如果我的电子邮件地址或用户名GitHub的变化。每次登录时,我是否只更新了本地到我的站点副本与GitHub上的一样?

Github上的电子邮件或用户变更不会影响您的登录(我们只检查provideruid领域登录用户)。

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

如果你要支持多个OAuth的供应商,我建议你通过阅读this article

您必须将uidprovider分隔到称为标识的其他表中。

每个帐户都有很多身份。

我也做过之前。

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

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

例如,用户已登录和登录使用OAuth提供商

用户和登录的OAuth =>未签名的OAuth =>链接帐户如果通过OAuth找到用户,登录,否则使用OAuth提供者的信息

创建账户

当然,如果我想用我的Facebook帐户以及我的GitHub帐户登录,这个问题会变得更糟。如果我的电子邮件地址和/或用户名在这两个地方都不同,会发生什么情况?我的本地网站如何知道将帐户链接在一起?如果帐号链接后,如果电子邮件地址等内容不同,我会使用哪一个?

我们只链接帐户,当用户。

已经签订当您链接帐户,你可以决定使用OAuth提供者的信息更新帐户(就像你用来注册帐户)。

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

相关问题