Sie können Nutzern die Anmeldung in Ihrer App über mehrere Authentifizierungsanbieter ermöglichen, indem Sie die Anmeldedaten des Authentifizierungsanbieters mit einem vorhandenen Nutzerkonto verknüpfen. Nutzer sind unabhängig vom Authentifizierungsanbieter, den sie für die Anmeldung verwendet 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 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).
DieFirebaseAuth-Klasse ist das Gateway für alle API-Aufrufe.
Sie ist über FirebaseAuth.DefaultInstance zugänglich.
Firebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance;
Anmeldedaten des Authentifizierungsanbieters mit einem Nutzerkonto verknüpfen
So verknüpfen Sie Anmeldedaten des Authentifizierungsanbieters mit einem bestehenden Nutzerkonto:
- Melden Sie sich mit einem beliebigen Authentifizierungsanbieter oder einer Methode an.
- Schließen Sie den Anmeldevorgang für den neuen Authentifizierungsanbieter ab, bis Sie eine der
Firebase.Auth.FirebaseAuth.SignInAndRetrieveDataWithCredentialAsync-Methoden aufrufen. Rufen Sie beispielsweise das Google-ID-Token, das Facebook-Zugriffstoken oder die E‑Mail-Adresse und das Passwort des Nutzers ab. Rufen Sie ein
Google Log-inFirebase.Auth.Credentialfür den neuen Authentifizierungsanbieter ab: Facebook-AnmeldungFirebase.Auth.Credential credential = Firebase.Auth.GoogleAuthProvider.GetCredential(googleIdToken, googleAccessToken);
Anmeldung mit E-Mail-Adresse und PasswortFirebase.Auth.Credential credential = Firebase.Auth.FacebookAuthProvider.GetCredential(accessToken);
Firebase.Auth.Credential credential = Firebase.Auth.EmailAuthProvider.GetCredential(email, password);
Übergeben Sie das
Firebase.Auth.Credential-Objekt an die MethodeLinkWithCredentialAsyncdes angemeldeten Nutzers:auth.CurrentUser.LinkWithCredentialAsync(credential).ContinueWith(task => { if (task.IsCanceled) { Debug.LogError("LinkWithCredentialAsync was canceled."); return; } if (task.IsFaulted) { Debug.LogError("LinkWithCredentialAsync encountered an error: " + task.Exception); return; } Firebase.Auth.AuthResult result = task.Result; Debug.LogFormat("Credentials successfully linked to Firebase user: {0} ({1})", result.User.DisplayName, result.User.UserId); });
Der Aufruf von
LinkWithCredentialAsyncschlägt fehl, wenn die Anmeldedaten bereits mit einem anderen Nutzerkonto verknüpft sind. In diesem Fall müssen Sie das Zusammenführen der Konten und der zugehörigen Daten entsprechend Ihrer App vornehmen:// Gather data for the currently signed in User. string currentUserId = auth.CurrentUser.UserId; string currentEmail = auth.CurrentUser.Email; string currentDisplayName = auth.CurrentUser.DisplayName; System.Uri currentPhotoUrl = auth.CurrentUser.PhotoUrl; // Sign in with the new credentials. auth.SignInAndRetrieveDataWithCredentialAsync(credential).ContinueWith(task => { if (task.IsCanceled) { Debug.LogError("SignInAndRetrieveDataWithCredentialAsync was canceled."); return; } if (task.IsFaulted) { Debug.LogError("SignInAndRetrieveDataWithCredentialAsync encountered an error: " + task.Exception); return; } Firebase.Auth.AuthResult result = task.Result; Debug.LogFormat("User signed in successfully: {0} ({1})", result.User.DisplayName, result.User.UserId); // TODO: Merge app specific details using the newUser and values from the // previous user, saved above. });
Wenn der Aufruf von LinkWithCredentialAsync 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
Ein einzelnes Firebase-Nutzerkonto kann mit mehreren Authentifizierungsanbietern verknüpft sein, z. B. E-Mail-Adresse/Passwort, Google, Facebook. So kann sich der Nutzer mit verschiedenen Methoden im selben Firebase-Konto anmelden.
Wenn Sie die Verknüpfung eines Authentifizierungsanbieters mit dem Konto eines Nutzers aufheben, kann sich der Nutzer nicht mehr mit diesem Anbieter anmelden.
Wenn Sie die Verknüpfung eines Authentifizierungsanbieters mit einem Nutzerkonto aufheben möchten, übergeben Sie die Anbieter-ID an die Methode UnlinkAsync. Sie können die Anbieter-IDs der mit einem Nutzer verknüpften Authentifizierungsanbieter abrufen, indem Sie
ProviderData aufrufen.
// Unlink the sign-in provider from the currently active user. // providerIdString is a string identifying a provider, // retrieved via FirebaseAuth.FetchProvidersForEmail(). auth.CurrentUser.UnlinkAsync(providerIdString).ContinueWith(task => { if (task.IsCanceled) { Debug.LogError("UnlinkAsync was canceled."); return; } if (task.IsFaulted) { Debug.LogError("UnlinkAsync encountered an error: " + task.Exception); return; } // The user has been unlinked from the provider. Firebase.Auth.AuthResult result = task.Result; Debug.LogFormat("Credentials successfully unlinked from user: {0} ({1})", result.User.DisplayName, result.User.UserId); });
Fehlerbehebung
Wenn beim Verknüpfen mehrerer Konten Fehler auftreten, lesen Sie die Dokumentation zu bestätigten E‑Mail-Adressen.