您可以將驗證供應商憑證連結至現有使用者帳戶,允許使用者透過多個驗證供應商登入應用程式。無論使用者透過哪個驗證提供者登入,系統都會使用相同的 Firebase 使用者 ID 識別使用者。舉例來說,以密碼登入的使用者可以連結 Google 帳戶,日後就能透過任一方法登入。或者,匿名使用者可以連結 Facebook 帳戶,然後稍後使用 Facebook 登入,繼續使用您的應用程式。
事前準備
在應用程式中新增對兩個以上驗證供應商的支援 (可能包括匿名驗證)。
將驗證供應商憑證連結至使用者帳戶
如要將驗證供應商憑證連結至現有使用者帳戶,請按照下列步驟操作:
使用任何驗證供應商或方法登入使用者。
完成新驗證提供者的登入流程,但不要呼叫任何
signInWith
方法。例如,取得使用者的 Google ID 權杖、Facebook 存取權杖,或是電子郵件和密碼。取得新驗證供應商的
Credential
物件:// Google Sign-in final credential = GoogleAuthProvider.credential(idToken: idToken); // Email and password sign-in final credential = EmailAuthProvider.credential(email: emailAddress, password: password); // Etc.
將
Credential
物件傳遞至登入使用者的linkWithCredential()
方法:try { final userCredential = await FirebaseAuth.instance.currentUser ?.linkWithCredential(credential); } on FirebaseAuthException catch (e) { switch (e.code) { case "provider-already-linked": print("The provider has already been linked to the user."); break; case "invalid-credential": print("The provider's credential is not valid."); break; case "credential-already-in-use": print("The account corresponding to the credential already exists, " "or is already linked to a Firebase User."); break; // See the API reference for the full list of error codes. default: print("Unknown error."); } ```
如果對 linkWithCredential()
的呼叫成功,使用者現在就能使用任何已連結的驗證供應商登入,並存取相同的 Firebase 資料。
取消連結使用者帳戶與驗證服務供應商
您可以取消驗證供應商與帳戶的連結,這樣使用者就無法再透過該供應商登入。
如要取消授權提供者與使用者帳戶的連結,請將提供者 ID 傳遞至 unlink()
方法。您可以從 User
物件的 providerData
屬性,取得連結至使用者的驗證提供者 ID。
try {
await FirebaseAuth.instance.currentUser?.unlink(providerId);
} on FirebaseAuthException catch (e) {
switch (e.code) {
case "no-such-provider":
print("The user isn't linked to the provider or the provider "
"doesn't exist.");
break;
default:
print("Unknown error.");
}
}
疑難排解
如果嘗試連結多個帳戶時發生錯誤,請參閱已驗證電子郵件地址的說明文件。