您可以透過將身分驗證提供者憑證連結到現有使用者帳戶,允許使用者使用多個驗證提供者登入您的應用程式。無論使用者用於登入的驗證提供者為何,都可以透過相同的 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.");
}
}