2017-08-15 75 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提供商的信息更新它。

相關問題