Połącz wielu dostawców uwierzytelniania z kontem

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).

Aby połączyć dane logowania dostawcy uwierzytelniania z istniejącym kontem użytkownika:

  1. Zaloguj użytkownika przy użyciu dowolnego dostawcy lub metody uwierzytelniania.

  2. 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.

  3. 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.
  4. Przekaż obiekt Credential do linkWithCredential() 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.

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.");
 
}
}

Developer documentation for Firebase

Aktualizacja: Aug 29, 2024

Developer documentation for Firebase

Aktualizacja: Aug 29, 2024

Developer documentation for Firebase

Aktualizacja: Aug 29, 2024