Możesz zezwolić użytkownikom na logowanie się do Twojej 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 zidentyfikować za pomocą tego samego identyfikatora użytkownika Firebase, niezależnie od dostawcy uwierzytelniania, którego użyli do zalogowania. Na przykład użytkownik, który zalogował się przy użyciu hasła, może w przyszłości połączyć konto Google i zalogować 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ę co najmniej dwóch dostawców uwierzytelniania (możliwe, że w tym uwierzytelnianie anonimowe) do swojej aplikacji.
Połącz dane uwierzytelniające dostawcy uwierzytelniania z kontem użytkownika
Aby połączyć poświadczenia dostawcy uwierzytelniania z istniejącym kontem użytkownika:
Zaloguj się użytkownika przy użyciu dowolnego dostawcy lub metody uwierzytelniania.
Zakończ przepływ logowania dla nowego dostawcy uwierzytelniania, aż do wywołania jednej z metod
signInWith
—, ale nie w tym. 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 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, należy przekazać identyfikator dostawcy do metody unlink()
. Identyfikatory dostawców 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("Unkown error.");
}
}