Mehrere Authentifizierungsanbieter mit einem Konto verknüpfen

Sie können Nutzern erlauben, sich mit mehreren Authentifizierungsanbietern in Ihrer App anzumelden, indem Sie die Anmeldedaten des Authentifizierungsanbieters mit einem vorhandenen Nutzerkonto verknüpfen. Die Nutzer werden unabhängig davon, ob sie Authentifizierungsanbieter, mit dem er sich angemeldet hat. Beispiel: Ein Nutzer, der sich mit einem Passwort ein Google-Konto verknüpfen und sich mit beiden Methoden im in der Zukunft. Ein anonymer Nutzer kann auch ein Facebook-Konto verknüpfen und sich später mit Facebook anmelden, um Ihre App weiter zu verwenden.

Hinweis

Unterstützung für zwei oder mehr Authentifizierungsanbieter hinzufügen (möglicherweise anonyme Authentifizierung) an Ihre Anwendung.

So verknüpfen Sie die Anmeldedaten des Authentifizierungsanbieters mit einem vorhandenen Nutzerkonto:

  1. Melden Sie den Nutzer mit einem beliebigen Authentifizierungsanbieter oder einer beliebigen Authentifizierungsmethode an.

  2. Führe den Anmeldevorgang für den neuen Authentifizierungsanbieter bis zum Aufruf einer der signInWith-Methoden durch, aber nicht bis zum Aufruf. Beispielsweise das Google-ID-Token, das Facebook-Zugriffstoken oder die E-Mail-Adresse und das Passwort des Nutzers.

  3. Rufen Sie ein Credential-Objekt für den neuen Authentifizierungsanbieter ab:

    // Google Sign-in
    final credential = GoogleAuthProvider.credential(idToken: idToken);
    
    // Email and password sign-in
    final credential =
        EmailAuthProvider.credential(email: emailAddress, password: password);
    
    // Etc.
    
  4. Übergeben Sie das Credential-Objekt an die Methode linkWithCredential() des angemeldeten Nutzers:

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

Wenn der Aufruf von linkWithCredential() erfolgreich war, kann sich der Nutzer jetzt mit einem beliebigen verknüpften Authentifizierungsanbieter anmelden und auf dieselben Firebase-Daten zugreifen.

Sie können die Verknüpfung eines Authentifizierungsanbieters mit einem Konto aufheben, sodass der Nutzer sich nicht länger bei diesem Anbieter anmelden.

Wenn Sie die Verknüpfung eines Authentifizierungsanbieters mit einem Nutzerkonto aufheben möchten, übergeben Sie die Anbieter-ID an den unlink()-Methode. Sie können die Anbieter-IDs der verknüpften Authentifizierungsanbieter abrufen. einen Nutzer aus der Eigenschaft providerData des User-Objekts.

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