您可以將驗證供應商憑證連結至現有使用者帳戶,允許使用者透過多個驗證供應商登入應用程式。無論使用者透過哪個驗證提供者登入,系統都會使用相同的 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.");
  }
}
疑難排解
如果嘗試連結多個帳戶時發生錯誤,請參閱已驗證電子郵件地址的說明文件。