Sie können Nutzern erlauben, sich mit Mehrfachauthentifizierung 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, anhand derselben Firebase-Nutzer-ID identifizierbar. Beispiel: Ein Nutzer, der sich mit einem Passwort ein Google-Konto verknüpfen und sich mit beiden Methoden im in der Zukunft. Oder ein anonymer Nutzer kann ein Facebook-Konto verknüpfen und später sich bei Facebook an, damit Sie Ihre App weiterhin nutzen können.
Hinweis
Unterstützung für zwei oder mehr Authentifizierungsanbieter hinzufügen (möglicherweise anonyme Authentifizierung) an Ihre Anwendung.
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 Authentifizierungsmethode an.
- Führe den Anmeldevorgang für den neuen Authentifizierungsanbieter bis zum Aufruf einer der
FirebaseAuth.signInWith
-Methoden durch, aber nicht bis zum Aufruf. Beispiel: get Das Google-ID-Token, das Facebook-Zugriffstoken oder die E-Mail-Adresse und das Passwort des Nutzers Rufen Sie eine
AuthCredential
für den neuen Authentifizierungsanbieter ab:Google Log-in
Kotlin+KTX
val credential = GoogleAuthProvider.getCredential(googleIdToken, null)
Java
AuthCredential credential = GoogleAuthProvider.getCredential(googleIdToken, null);
Facebook-Anmeldung
Kotlin+KTX
val credential = FacebookAuthProvider.getCredential(token.token)
Java
AuthCredential credential = FacebookAuthProvider.getCredential(token.getToken());
Anmeldung mit E-Mail-Passwort
Kotlin+KTX
val credential = EmailAuthProvider.getCredential(email, password)
Java
AuthCredential credential = EmailAuthProvider.getCredential(email, password);
Übergeben Sie das
AuthCredential
-Objekt an daslinkWithCredential
-Methode:Kotlin+KTX
auth.currentUser!!.linkWithCredential(credential) .addOnCompleteListener(this) { task -> if (task.isSuccessful) { Log.d(TAG, "linkWithCredential:success") val user = task.result?.user updateUI(user) } else { Log.w(TAG, "linkWithCredential:failure", task.exception) Toast.makeText( baseContext, "Authentication failed.", Toast.LENGTH_SHORT, ).show() updateUI(null) } }
Java
mAuth.getCurrentUser().linkWithCredential(credential) .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { @Override public void onComplete(@NonNull Task<AuthResult> task) { if (task.isSuccessful()) { Log.d(TAG, "linkWithCredential:success"); FirebaseUser user = task.getResult().getUser(); updateUI(user); } else { Log.w(TAG, "linkWithCredential:failure", task.getException()); Toast.makeText(AnonymousAuthActivity.this, "Authentication failed.", Toast.LENGTH_SHORT).show(); updateUI(null); } } });
Der Aufruf von
linkWithCredential
schlägt fehl, wenn die Anmeldedaten bereits mit einem anderen Nutzerkonto verknüpft ist. In diesem Fall müssen Sie die Konten und die zugehörigen Daten nach Bedarf für Ihre App zusammenführen:Kotlin+KTX
val prevUser = auth.currentUser auth.signInWithCredential(credential) .addOnSuccessListener { result -> val currentUser = result.user // Merge prevUser and currentUser accounts and data // ... } .addOnFailureListener { // ... }
Java
FirebaseUser prevUser = FirebaseAuth.getInstance().getCurrentUser(); mAuth.signInWithCredential(credential) .addOnCompleteListener(new OnCompleteListener<AuthResult>() { @Override public void onComplete(@NonNull Task<AuthResult> task) { FirebaseUser currentUser = task.getResult().getUser(); // Merge prevUser and currentUser accounts and data // ... } });
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.
Verknüpfung eines Authentifizierungsanbieters mit einem Nutzerkonto aufheben
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 Authentifizierungsanbieter abrufen.
die mit einem Nutzer verknüpft ist, indem sie aufruft.
getProviderData
Kotlin+KTX
Firebase.auth.currentUser!!.unlink(providerId) .addOnCompleteListener(this) { task -> if (task.isSuccessful) { // Auth provider unlinked from account // ... } }
Java
mAuth.getCurrentUser().unlink(providerId) .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { @Override public void onComplete(@NonNull Task<AuthResult> task) { if (task.isSuccessful()) { // Auth provider unlinked from account // ... } } });