您可以讓使用者透過多重驗證機制登入您的應用程式 將驗證服務供應商憑證連結至現有使用者帳戶。 無論 用於登入的驗證服務供應商例如登入後 使用密碼可以連結 Google 帳戶,並在 或者,匿名使用者也可以連結 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()
方法。您可以取得連結至驗證供應商的供應商 ID
來自 User
物件的 providerData
屬性的使用者。
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.");
}
}