如何在我的网站上使用X登录,当同一用户有多个提供商的帐户时?
如果我有一个可以与多个不同供应商(说Facebook,GitHub,Google)签约的网站,我用什么作为用户的本地到我的网站唯一标识符?例如,如果这两个步骤发生:如何在我的网站上使用X登录,当同一用户有多个提供商的帐户时?
- 我的GitHub登录(第一次)和我的用户名是mogronalol和电子邮件是[email protected]。
- 一个本地到我的网站帐户的电子邮件地址为[email protected],用户名为mogronalol。
如果我使用的电子邮件地址作为本地唯一的标识符,如果在GitHub上我的电子邮件地址更改为[email protected]会发生什么?同样的问题也适用于更改用户名。
如果我得到了某种从GitHub唯一的ID,并用作为标识符,那么我该怎么办,如果我的电子邮件地址或用户名GitHub的变化。每次登录时,我是否只更新了本地到我的站点副本与GitHub上的一样?
当然,如果我想用我的Facebook帐户,以及我的GitHub帐号登录这个问题恶化。如果我的电子邮件地址和/或用户名在这两个地方都不同,会发生什么情况?我的本地网站如何知道将帐户链接在一起?如果帐号链接后,如果电子邮件地址等内容不同,我会使用哪一个?
首先,也许你可以尝试一些教程来感受OAuth的工作方式。
后您的OAuth认证成功,您的网站将收到的一系列的OAuth提供者提供的信息。 example
在此信息中,有两个专门名称uid
和provider
用于从OAuth提供商识别用户。
您将使用这两列来告诉哪个提供者身份验证来自(即facebook
或github
),您还需要将这些字段保存到您的帐户列。
然后使用其余信息在您的网站上创建帐户。
例如,使用OAuth提供商的电子邮件作为email
(GitHub的电子邮件,电子邮件)。
创建帐户后,每次从OAuth提供程序登录服务器时。
你只需要检查provider
和uid
在账户栏。
让我们回到你的问题。
如果我使用电子邮件地址作为本地唯一标识符,如果我的电子邮件地址在GitHub中更改为[email protected],会发生什么情况?同样的问题也适用于更改用户名。
如果我得到了某种从GitHub唯一的ID,并用作为标识符,那么我该怎么办,如果我的电子邮件地址或用户名GitHub的变化。每次登录时,我是否只更新了本地到我的站点副本与GitHub上的一样?
Github上的电子邮件或用户变更不会影响您的登录(我们只检查provider
和uid
领域登录用户)。
我建议不要与您的OAuth提供商的信息同步(我们仅在创建帐户时使用OAuth提供商的信息)。
如果你要支持多个OAuth的供应商,我建议你通过阅读this article。
您必须将uid
和provider
分隔到称为标识的其他表中。
每个帐户都有很多身份。
我也做过之前。
如果您不介意,here是处理多个OAuth提供程序的示例代码片段。
您必须考虑登录流程中的逻辑。
例如,用户已登录和登录使用OAuth提供商
用户和登录的OAuth =>未签名的OAuth =>链接帐户如果通过OAuth找到用户,登录,否则使用OAuth提供者的信息
创建账户当然,如果我想用我的Facebook帐户以及我的GitHub帐户登录,这个问题会变得更糟。如果我的电子邮件地址和/或用户名在这两个地方都不同,会发生什么情况?我的本地网站如何知道将帐户链接在一起?如果帐号链接后,如果电子邮件地址等内容不同,我会使用哪一个?
我们只链接帐户,当用户。
已经签订当您链接帐户,你可以决定使用OAuth提供者的信息更新帐户(就像你用来注册帐户)。
我建议使用原始电子邮件不要从OAuth提供商的信息更新它。