Możesz zezwolić użytkownikom na logowanie się do aplikacji przy użyciu wielu dostawców uwierzytelniania, łącząc poświadczenia dostawcy uwierzytelniania z istniejącym kontem użytkownika. Użytkowników można rozpoznać po tym samym identyfikatorze użytkownika Firebase, niezależnie od dostawcy uwierzytelniania, którego użyli do zalogowania się. Na przykład użytkownik, który zalogował się przy użyciu hasła, będzie mógł w przyszłości połączyć konto Google i logować się dowolną metodą. Lub anonimowy użytkownik może połączyć konto na Facebooku, a następnie zalogować się za pomocą Facebooka, aby dalej korzystać z aplikacji.
Zanim zaczniesz
Dodaj obsługę dwóch lub większej liczby dostawców uwierzytelniania (prawdopodobnie włączając uwierzytelnianie anonimowe) do swojej aplikacji.
Połącz poświadczenia dostawcy uwierzytelniania z kontem użytkownika
Aby połączyć poświadczenia dostawcy uwierzytelniania z istniejącym kontem użytkownika:
Zaloguj się przy użyciu dowolnego dostawcy lub metody uwierzytelniania.
Ukończ proces logowania dla nowego dostawcy uwierzytelniania, ale nie włączając, wywołując jedną z metod
signInWith
-. Na przykład uzyskaj token identyfikatora Google użytkownika, token dostępu do Facebooka lub adres e-mail i hasło.Uzyskaj obiekt
Credential
dla nowego dostawcy uwierzytelniania:// Google Sign-in final credential = GoogleAuthProvider.credential(idToken: idToken); // Email and password sign-in final credential = EmailAuthProvider.credential(email: emailAddress, password: password); // Etc.
Przekaż obiekt
Credential
do metodylinkWithCredential()
zalogowanego użytkownika: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."); } ```
Jeśli wywołanie metody linkWithCredential()
powiedzie się, użytkownik może teraz zalogować się przy użyciu dowolnego połączonego dostawcy uwierzytelniania i uzyskać dostęp do tych samych danych Firebase.
Odłącz dostawcę uwierzytelniania od konta użytkownika
Możesz odłączyć dostawcę uwierzytelniania od konta, aby użytkownik nie mógł już logować się u tego dostawcy.
Aby odłączyć dostawcę uwierzytelniania od konta użytkownika, przekaż identyfikator dostawcy do metody unlink()
. Identyfikatory dostawców uwierzytelniania połączonych z użytkownikiem można uzyskać z właściwości providerData
obiektu User
.
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.");
}
}