簡體   English   中英

將自定義身份驗證提供程序與 Firebase 相關聯

[英]Linking custom auth provider with Firebase

我讀到使用 Firebase 我可以允許用戶通過將身份驗證提供程序憑據鏈接到現有用戶帳戶來使用多個身份驗證提供程序登錄我的應用程序。 是否可以鏈接自定義身份驗證提供程序,例如 Linkedin? 我讀到我需要將 AuthCredential 對象傳遞給登錄用戶的 linkWithCredential 方法,但我沒有找到自定義的 AuthCredential。

將不受支持的提供者自定義令牌鏈接到現有帳戶的一種方法是獲取 Firebase 帳戶的用戶 ID 和不受支持的提供者用戶 ID 並保存一個哈希映射,該映射接受不受支持的提供者 ID 並返回您要鏈接到的 Firebase uid . 當用戶使用自定義令牌登錄到不受支持的提供程序時,您會從地圖中獲取相應的 firebase uid 並返回帶有該 uid 的自定義令牌,該 uid 在 signInWithCustomToken 上與原始 firebase 用戶解析。

缺點是您在用戶的提供者數據列表中看不到不受支持的提供者。 您還需要存儲地圖。

我想擴展 bojeil 的答案。

支持的提供者有 firebaseUser.linkWithCredential firebaseUser.linkWithCredential(credential) ,但不等同於 customProvider。 鏈接 customProvider 必須由后端完成(或者可能像 Firebase 函數一樣)。 因為link意味着其中之一:

  • 添加電子郵件
  • 添加電話號碼
  • 自定義邏輯(添加用戶聲明)

Firebase User對象。

流程是這樣的:

  1. 客戶端從 customProvider(Line、LinkedIn、Huawei...)獲取emailphone或一些獨特的信息,並將它們發送到后端,包括firebaseToken
  2. (后端可以通過詢問 customProvider 來驗證這些數據)。 然后后端將這些信息添加到FirebaseUser對象。 (后端還必須檢查這些數據是否已經附加到其他用戶。您可能會拒絕鏈接,因為已經有其他用戶使用這些電子郵件、電話......)
  3. 后端將<CustomProviderId-FirebaseUserId>對保存在某處(例如: FireStore )。 這樣做是因為將來,當用戶想要使用 customProvider 登錄時,后端需要使用該用戶的Firebase Id創建CustomToken (因此客戶端可以調用firebaseAuth.signInWithCustomToken )。 所以這個 Mapping 是這個問題的解決方案。
  4. 后端將響應 200 HTTP 響應代碼以指示鏈接成功
  5. 客戶端調用firebaseUser.reload()以獲取新附加的數據(電子郵件、電話等...)
  6. 如果用戶聲明在步驟 2 中更新,則客戶端還必須調用firebaseUser.getIdToken(force=true)以獲取更新的用戶聲明。

挑戰

  • 如果 customProvider 只提供email ,您需要檢查該電子郵件是否已附加到任何其他用戶。
  • 如果 customProvider 只提供phone ,您需要檢查該電話是否已連接到任何其他用戶。
  • 如果 customProvider 可以同時提供emailphone ,則復雜性會增加,因為您必須檢查是否已經附加到任何其他用戶。
  • 如果 customProvider 不提供emailphone ,那么您需要該自定義提供商的該用戶的唯一信息(例如華為用戶 ID)。
  • CustomProvider 不會在firebaseUser.providerData列表中,因此您可以添加用戶聲明。 (例如{kakaoTalk:true, huawei:true} )。 根據情況,您不需要那個。 例如,如果是customProvider WhatsApp的,那么如果phone中存在firebaseUser.phoneNumber它意味着WhatsApp的鏈接(即使電話被使用在提供商另一個標志添加)。
  • 如果允許Anonymous用戶,然后鏈接customProvider可能不會更新firebaseUser.isAnonymous客戶端,如果沒有更新的電子郵件/電話,客戶仍然會看到firebaseUser匿名。 一種解決方案是檢查 linksProviders 是否為空以將用戶視為匿名用戶,如果您的業務邏輯沒問題。 其他解決方案是當您使用signInWithCustomToken登錄用戶時匿名用戶狀態更改。 因此,在鏈接 customProvider 成功后,靜默注銷並使用 customToken 登錄,這樣用戶就不是匿名的。
  • 如果您將 customProvider 與email鏈接到匿名用戶,則會更新該用戶的email字段。 這將強制客戶端注銷並拋出FirebaseAuthInvalidUserException ERROR_USER_TOKEN_EXPIRED 用戶必須重新登錄。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM