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. Nutzer sind unabhängig vom Authentifizierungsanbieter, mit dem sie sich angemeldet haben, durch dieselbe Firebase-Nutzer-ID identifizierbar. Ein Nutzer, der sich beispielsweise mit einem Passwort angemeldet hat, kann ein Google-Konto verknüpfen und sich in Zukunft mit beiden Methoden anmelden. Oder ein anonymer Nutzer kann ein Facebook-Konto verknüpfen und sich dann 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, einschließlich der anonymen Authentifizierung.
Anmeldedaten des Authentifizierungsanbieters mit einem Nutzerkonto verknüpfen
So verknüpfen Sie die Anmeldedaten des Authentifizierungsanbieters mit einem vorhandenen Nutzerkonto:
Melden Sie den Nutzer mit einem beliebigen Authentifizierungsanbieter oder einer beliebigen Methode an.
Führen Sie den Anmeldevorgang für den neuen Authentifizierungsanbieter bis zum Aufruf einer der
signInWith-Methoden aus, aber nicht einschließlich. Rufen Sie beispielsweise das Google-ID-Token, das Facebook-Zugriffstoken oder die E-Mail-Adresse und das Passwort des Nutzers ab.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.Übergeben Sie das
Credential-Objekt an dielinkWithCredential()-Methode 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.
Verknüpfung eines Authentifizierungsanbieters mit einem Nutzerkonto aufheben
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 Authentifizierungsanbieter, die mit einem Nutzer verknüpft sind, über die Eigenschaft providerData 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.