Możesz zezwolić użytkownikom na logowanie się w aplikacji za pomocą kilku dostawców uwierzytelniania, łącząc dane logowania dostawcy uwierzytelniania z istniejącym kontem użytkownika. Użytkownicy są identyfikowani za pomocą tego samego identyfikatora użytkownika Firebase niezależnie od dostawcy uwierzytelniania, którego użyli do zalogowania się. Użytkownik, który zalogował się za pomocą hasła, może na przykład połączyć konto Google i w przyszłości logować się za pomocą dowolnej z tych metod. Użytkownik anonimowy może też połączyć konto na Facebooku, a potem logować się za pomocą Facebooka, aby nadal korzystać z aplikacji.
Zanim zaczniesz
Dodaj do aplikacji obsługę co najmniej 2 dostawców uwierzytelniania (w tym uwierzytelniania anonimowego).
Łączenie danych logowania dostawcy uwierzytelniania z kontem użytkownika
Aby połączyć dane logowania dostawcy uwierzytelniania z istniejącym kontem użytkownika:
Zaloguj użytkownika za pomocą dowolnego dostawcy lub metody uwierzytelniania.
Dokończ proces logowania u nowego dostawcy uwierzytelniania, ale nie wywołuj żadnej z metod
signInWith. Na przykład pobierz token identyfikatora Google użytkownika, token dostępu do Facebooka lub adres e-mail i hasło.Pobierz obiekt
Credentialdla 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
Credentialdo 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() się powiedzie, użytkownik będzie mógł zalogować się za pomocą dowolnego połączonego dostawcy uwierzytelniania i uzyskać dostęp do tych samych danych Firebase.
Odłączanie dostawcy uwierzytelniania od konta użytkownika
Możesz odłączyć dostawcę uwierzytelniania od konta, aby użytkownik nie mógł się już logować za pomocą 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żesz 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.");
}
}
Rozwiązywanie problemów
Jeśli podczas próby połączenia kilku kont wystąpią błędy, zapoznaj się z dokumentacją dotyczącą zweryfikowanych adresów e-mail.