Sie können Benutzern erlauben, sich mit mehreren Authentifizierungsanbietern bei Ihrer App anzumelden, indem Sie die Anmeldeinformationen des Authentifizierungsanbieters mit einem vorhandenen Benutzerkonto verknüpfen. Benutzer sind durch dieselbe Firebase-Benutzer-ID identifizierbar, unabhängig davon, welchen Authentifizierungsanbieter sie für die Anmeldung verwendet haben. Beispielsweise kann ein Benutzer, der sich mit einem Passwort angemeldet hat, ein Google-Konto verknüpfen und sich in Zukunft mit einer der beiden Methoden anmelden. Oder ein anonymer Benutzer kann ein Facebook-Konto verknüpfen und sich später bei Facebook anmelden, um Ihre App weiter zu verwenden.
Bevor Sie beginnen
Fügen Sie Ihrer App Unterstützung für zwei oder mehr Authentifizierungsanbieter (möglicherweise einschließlich anonymer Authentifizierung) hinzu.
Verknüpfen Sie die Anmeldeinformationen des Authentifizierungsanbieters mit einem Benutzerkonto
So verknüpfen Sie die Anmeldeinformationen des Authentifizierungsanbieters mit einem vorhandenen Benutzerkonto:
Melden Sie den Benutzer mit einem beliebigen Authentifizierungsanbieter oder einer beliebigen Methode an.
Vervollständigen Sie den Anmeldeablauf für den neuen Authentifizierungsanbieter bis zum Aufrufen einer der
signInWith
Methoden (aber nicht einschließlich). Rufen Sie beispielsweise das Google-ID-Token, das Facebook-Zugriffstoken oder die E-Mail-Adresse und das Passwort des Benutzers 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 die MethodelinkWithCredential()
des Anmeldebenutzers: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 Benutzer jetzt mit einem beliebigen verknüpften Authentifizierungsanbieter anmelden und auf dieselben Firebase-Daten zugreifen.
Verknüpfung eines Authentifizierungsanbieters mit einem Benutzerkonto aufheben
Sie können die Verknüpfung eines Authentifizierungsanbieters mit einem Konto aufheben, sodass sich der Benutzer nicht mehr bei diesem Anbieter anmelden kann.
Um die Verknüpfung eines Authentifizierungsanbieters mit einem Benutzerkonto aufzuheben, übergeben Sie die Anbieter-ID an die unlink()
Methode. Sie können die Anbieter-IDs der mit einem Benutzer verknüpften Authentifizierungsanbieter aus der Eigenschaft providerData
des User
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("Unkown error.");
}
}