Możesz zezwolić użytkownikom na logowanie się w aplikacji przy użyciu wielokrotnego uwierzytelniania. przez połączenie danych logowania dostawcy uwierzytelniania z istniejącym kontem użytkownika. Użytkowników można zidentyfikować na podstawie tego samego identyfikatora użytkownika Firebase niezależnie od parametru dostawcy uwierzytelniania, którego użyli do logowania. Na przykład: użytkownik, który zalogował się hasła, możesz połączyć konto Google i zalogować się za pomocą dowolnej z tych metod w przyszłości. Anonimowy użytkownik może też połączyć konto na Facebooku, a później się zalogować z Facebookiem, aby dalej korzystać z aplikacji.
Zanim zaczniesz
Dodanie obsługi co najmniej 2 dostawców uwierzytelniania (możesz uwzględnić anonimowego uwierzytelniania).
Łą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 przy użyciu dowolnego dostawcy lub metody uwierzytelniania.
Przeprowadź proces logowania w przypadku nowego dostawcy uwierzytelniania do, ale nie w tym wywołanie jednej z metod
signInWith
. Na przykład pobierz token identyfikatora Google użytkownika, token dostępu Facebooka lub adres e-mail i hasło.Pobierz 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
dolinkWithCredential()
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 może się teraz zalogować za pomocą
dowolnego połączonego dostawcy uwierzytelniania i mieć 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ł logować się dłużej u tego dostawcy.
Aby odłączyć dostawcę uwierzytelniania od konta użytkownika, przekaż identyfikator dostawcy do
Metoda unlink()
. Możesz uzyskać identyfikatory dostawców uwierzytelniania połączonych z tymi dostawcami
użytkownika 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.");
}
}