Mehrere Authentifizierungsanbieter mit einem Konto verknüpfen

Sie können Nutzern die Anmeldung in Ihrer App über mehrere Authentifizierungsanbieter ermöglichen, indem Sie Anmeldedaten des Authentifizierungsanbieters mit einem vorhandenen Nutzerkonto verknüpfen. Nutzer sind unabhängig vom Authentifizierungsanbieter, den sie für die Anmeldung verwendet haben, anhand derselben Firebase-Nutzer-ID identifizierbar. Ein Nutzer, der sich beispielsweise mit einem Passwort angemeldet hat, kann ein Google-Konto verknüpfen und sich künftig mit einer der beiden Methoden anmelden. Alternativ kann ein anonymer Nutzer ein Facebook-Konto verknüpfen und sich später mit Facebook anmelden, um Ihre App weiter zu verwenden.

Hinweis

Fügen Sie Ihrer App Unterstützung für zwei oder mehr Authentifizierungsanbieter hinzu (möglicherweise einschließlich anonymer Authentifizierung).

So verknüpfen Sie Anmeldedaten eines Authentifizierungsanbieters mit einem bestehenden Nutzerkonto:

  1. Melden Sie sich mit einem beliebigen Authentifizierungsanbieter oder einer Methode an.

  2. Führen Sie den Anmeldevorgang für den neuen Authentifizierungsanbieter bis zum Aufrufen einer der signInWith-Methoden durch. Sie können beispielsweise das Google-ID-Token, das Facebook-Zugriffstoken oder die E‑Mail-Adresse und das Passwort des Nutzers abrufen.

  3. Credential-Objekt für den neuen Authentifizierungsanbieter abrufen:

    // 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 ist, 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 sich der Nutzer nicht mehr mit diesem Anbieter anmelden kann.

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

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

Fehlerbehebung

Wenn beim Verknüpfen mehrerer Konten Fehler auftreten, lesen Sie die Dokumentation zu bestätigten E‑Mail-Adressen.