Sie können Firebase Authentication verwenden, um einen Nutzer anzumelden, indem Sie ihm eine E-Mail mit einem Link senden, auf den er klicken kann, um sich anzumelden. Dabei wird auch die E-Mail-Adresse des Nutzers bestätigt.
Die Anmeldung per E-Mail bietet zahlreiche Vorteile:
- Einfache Registrierung und Anmeldung
- Weniger Risiko, dass Passwörter in verschiedenen Anwendungen wiederverwendet werden, was die Sicherheit selbst gut ausgewählter Passwörter untergraben kann.
- Die Möglichkeit, einen Nutzer zu authentifizieren und gleichzeitig zu prüfen, ob er der rechtmäßige Inhaber einer E-Mail-Adresse ist.
- Nutzer benötigen nur ein zugängliches E-Mail-Konto, um sich anzumelden. Sie müssen nicht Inhaber einer Telefonnummer oder eines Kontos in sozialen Medien sein.
- Ein Nutzer kann sich sicher anmelden, ohne ein Passwort angeben oder sich merken zu müssen, was auf einem Mobilgerät umständlich sein kann.
- Ein bestehender Nutzer, der sich zuvor mit einer E-Mail-ID (Passwort oder föderiert) angemeldet hat, kann so konfiguriert werden, dass er sich nur noch mit der E-Mail-Adresse anmelden kann. So kann sich ein Nutzer, der sein Passwort vergessen hat, beispielsweise anmelden, ohne es zurücksetzen zu müssen.
Hinweis
Android-Projekt einrichten
Fügen Sie Ihrem Android-Projekt Firebase hinzu, falls noch nicht geschehen.
Fügen Sie in der Gradle-Datei des Moduls (auf Anwendungsebene) (in der Regel
<project>/<app-module>/build.gradle.kts
oder<project>/<app-module>/build.gradle
) die Abhängigkeit für die Firebase Authentication-Bibliothek für Android hinzu. Wir empfehlen, Firebase Android BoM zu verwenden, um die Versionierung der Bibliothek zu steuern.Außerdem müssen Sie bei der Einrichtung von Firebase Authentication das Google Play Services SDK in Ihre App einfügen.
dependencies { // Import the BoM for the Firebase platform implementation(platform("com.google.firebase:firebase-bom:33.8.0")) // Add the dependency for the Firebase Authentication library // When using the BoM, you don't specify versions in Firebase library dependencies implementation("com.google.firebase:firebase-auth")
// Also add the dependency for the Google Play services library and specify its version implementation("com.google.android.gms:play-services-auth:21.3.0") }Mit der Firebase Android BoM haben Sie immer eine kompatible Version der Firebase Android-Bibliotheken in Ihrer App.
Alternative: Firebase-Bibliotheksabhängigkeiten ohne BoM hinzufügen
Wenn Sie die Firebase BoM nicht verwenden, müssen Sie jede Firebase-Bibliotheksversion in der entsprechenden Abhängigkeitszeile angeben.
Wenn Sie mehrere Firebase-Bibliotheken in Ihrer App verwenden, empfehlen wir Ihnen dringend, die Bibliotheksversionen mithilfe der BoM zu verwalten. So wird sichergestellt, dass alle Versionen kompatibel sind.
dependencies { // Add the dependency for the Firebase Authentication library // When NOT using the BoM, you must specify versions in Firebase library dependencies implementation("com.google.firebase:firebase-auth:23.1.0")
// Also add the dependency for the Google Play services library and specify its version implementation("com.google.android.gms:play-services-auth:21.3.0") }
Anmeldung per E-Mail-Link für Ihr Firebase-Projekt aktivieren
Damit Nutzer sich per E-Mail-Link anmelden können, müssen Sie zuerst den E-Mail-Anbieter und die Anmeldemethode „E-Mail-Link“ für Ihr Firebase-Projekt aktivieren:
- Öffnen Sie in der Firebase Console den Bereich Auth.
- Aktivieren Sie auf dem Tab Anmeldemethode den Anbieter E-Mail/Passwort. Hinweis: Die Anmeldung per E-Mail/Passwort muss aktiviert sein, damit die Anmeldung über einen E-Mail-Link verwendet werden kann.
- Aktivieren Sie im selben Abschnitt die Anmeldemethode E-Mail-Link (Anmeldung ohne Passwort).
- Klicken Sie auf Speichern.
Einen Authentifizierungslink an die E-Mail-Adresse des Nutzers senden
Zum Initiieren des Authentifizierungsablaufs wird eine Schnittstelle angezeigt, in der der Nutzer aufgefordert wird, seine E-Mail-Adresse anzugeben, und dann sendSignInLinkToEmail
aufgerufen, um Firebase aufzufordern, den Authentifizierungslink an die E-Mail-Adresse des Nutzers zu senden.
Erstelle das Objekt ActionCodeSettings, das Firebase eine Anleitung zum Erstellen des E-Mail-Links liefert. Legen Sie die Werte für die folgenden Felder fest:
url
: Der einzubettende Deeplink und alle zusätzlichen Status, die übergeben werden sollen. Die Domain des Links muss in der Liste der autorisierten Domains in der Firebase Console auf die Zulassungsliste gesetzt werden. Diese Liste finden Sie auf dem Tab „Anmeldemethode“ (Authentifizierung -> Anmeldemethode). Über den Link wird der Nutzer zu dieser URL weitergeleitet, wenn die App nicht auf seinem Gerät installiert ist und nicht installiert werden konnte.androidPackageName
undiOSBundleId
: Hilft Firebase Authentication zu bestimmen, ob ein nur für das Web oder für Mobilgeräte geeigneter Link erstellt werden soll, der auf einem Android- oder Apple-Gerät geöffnet wird.handleCodeInApp
: Muss auf „wahr“ festgelegt sein. Im Gegensatz zu anderen E-Mail-Aktionen außerhalb des Bandes (Passwort zurücksetzen und E-Mail-Bestätigungen) muss die Anmeldung immer in der App erfolgen. Das liegt daran, dass der Nutzer am Ende des Ablaufs angemeldet sein und sein Authentifizierungsstatus in der App gespeichert sein soll.linkDomain
: Wenn für ein Projekt benutzerdefinierte Hosting-Linkdomains definiert sind, geben Sie an, welche verwendet werden soll, wenn der Link von einer bestimmten mobilen App geöffnet werden soll. Andernfalls wird automatisch die Standarddomain ausgewählt (z. B. ).PROJECT_ID.firebaseapp.com
dynamicLinkDomain
: Eingestellt. Geben Sie diesen Parameter nicht an.
Kotlin
val actionCodeSettings = actionCodeSettings { // URL you want to redirect back to. The domain (www.example.com) for this // URL must be whitelisted in the Firebase Console. url = "https://www.example.com/finishSignUp?cartId=1234" // This must be true handleCodeInApp = true setIOSBundleId("com.example.ios") setAndroidPackageName( "com.example.android", true, // installIfNotAvailable "12", // minimumVersion ) }
Java
ActionCodeSettings actionCodeSettings = ActionCodeSettings.newBuilder() // URL you want to redirect back to. The domain (www.example.com) for this // URL must be whitelisted in the Firebase Console. .setUrl("https://www.example.com/finishSignUp?cartId=1234") // This must be true .setHandleCodeInApp(true) .setIOSBundleId("com.example.ios") .setAndroidPackageName( "com.example.android", true, /* installIfNotAvailable */ "12" /* minimumVersion */) .build();
Weitere Informationen zu ActionCodeSettings finden Sie im Abschnitt Status in E-Mail-Aktionen übergeben.
Frage den Nutzer nach seiner E-Mail-Adresse.
Sende den Authentifizierungslink an die E-Mail-Adresse des Nutzers und speichere die E-Mail-Adresse des Nutzers für den Fall, dass er sich auf demselben Gerät mit der E-Mail-Adresse anmeldet.
Kotlin
Firebase.auth.sendSignInLinkToEmail(email, actionCodeSettings) .addOnCompleteListener { task -> if (task.isSuccessful) { Log.d(TAG, "Email sent.") } }
Java
FirebaseAuth auth = FirebaseAuth.getInstance(); auth.sendSignInLinkToEmail(email, actionCodeSettings) .addOnCompleteListener(new OnCompleteListener<Void>() { @Override public void onComplete(@NonNull Task<Void> task) { if (task.isSuccessful()) { Log.d(TAG, "Email sent."); } } });
Anmeldung über den E-Mail-Link abschließen
Sicherheitsbedenken
Damit ein Anmeldelink nicht dazu verwendet werden kann, sich als nicht beabsichtigter Nutzer oder auf einem nicht beabsichtigten Gerät anzumelden, muss bei Firebase Authentication die E-Mail-Adresse des Nutzers angegeben werden, wenn der Anmeldevorgang abgeschlossen wird. Damit die Anmeldung erfolgreich ist, muss diese E-Mail-Adresse mit der Adresse übereinstimmen, an die der Anmeldelink ursprünglich gesendet wurde.
Sie können diesen Ablauf für Nutzer optimieren, die den Anmeldelink auf demselben Gerät öffnen, auf dem sie den Link anfordern. Speichern Sie dazu beim Senden der E-Mail zur Anmeldung ihre E-Mail-Adresse lokal, z. B. mit SharedPreferences. Verwenden Sie diese Adresse dann, um den Vorgang abzuschließen. Übergeben Sie die E-Mail-Adresse des Nutzers nicht in den Parametern der Weiterleitungs-URL und verwenden Sie sie nicht wieder, da dies Sitzungseinschleusungen ermöglichen kann.
Nach Abschluss der Anmeldung werden alle zuvor nicht bestätigten Anmeldemechanismen für den Nutzer entfernt und alle vorhandenen Sitzungen ungültig gemacht. Wenn jemand beispielsweise zuvor ein nicht bestätigtes Konto mit derselben E-Mail-Adresse und demselben Passwort erstellt hat, wird das Passwort des Nutzers entfernt, um zu verhindern, dass sich der Betrüger, der den Anspruch auf das Konto erhoben und dieses nicht bestätigte Konto erstellt hat, noch einmal mit der nicht bestätigten E-Mail-Adresse und dem nicht bestätigten Passwort anmeldet.
Verwenden Sie außerdem in der Produktion eine HTTPS-URL, damit Ihr Link nicht von Zwischenservern abgefangen werden kann.
Anmeldung in einer Android-App abschließen
Firebase Authentication verwendet Firebase Hosting, um den E-Mail-Link an ein Mobilgerät zu senden. Damit die Anmeldung über eine mobile App abgeschlossen werden kann, muss die App so konfiguriert sein, dass sie den eingehenden App-Link erkennt, den zugrunde liegenden Deeplink analysiert und dann die Anmeldung abschließt. Weitere Informationen finden Sie in der Dokumentation zu App-Links für Android.
Firebase Hosting konfigurieren
Firebase Authentication verwendet Firebase Hosting-Domains, wenn ein Link erstellt und gesendet wird, der in einer mobilen App geöffnet werden soll. Eine StandardFirebase Hosting-Domain wurde bereits für Sie konfiguriert.
Firebase Hosting-Domains konfigurieren:
Öffnen Sie in der Firebase-Console den Bereich Hosting.
Wenn Sie die Standarddomain für den E-Mail-Link verwenden möchten, der in mobilen Apps geöffnet wird, rufen Sie Ihre Standardwebsite auf und notieren Sie sich die StandardHosting-Domain. Eine Standard-Hosting-Domain sieht in der Regel so aus:
.PROJECT_ID.firebaseapp.com
Sie benötigen diesen Wert, wenn Sie Ihre App so konfigurieren, dass der eingehende Link abgefangen wird.
Wenn Sie eine benutzerdefinierte Domain für den E-Mail-Link verwenden möchten, können Sie eine bei Firebase Hosting registrieren und diese für die Domain des Links verwenden.
So konfigurieren Sie Android-Anwendungen:
Damit diese Links von Ihrer Android-Anwendung verarbeitet werden können, muss der Paketname Ihrer App in den Projekteinstellungen der Firebase-Konsole angegeben werden. Außerdem müssen die SHA-1- und SHA-256-Hashwerte des Anwendungszertifikats angegeben werden.
Wenn diese Links zu einer bestimmten Aktivität weiterleiten sollen, müssen Sie in Ihrer
AndroidManifest.xml
-Datei einen Intent-Filter konfigurieren. Der Intent-Filter sollte E-Mail-Links Ihrer Domain erkennen. InAndroidManifest.xml
:<intent-filter android:autoVerify="true"> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.BROWSABLE" /> <category android:name="android.intent.category.DEFAULT" /> <data android:scheme="https" android:host="<PROJECT_ID>.firebaseapp.com or your custom domain" android:pathPrefix="/__/auth/links" /> </intent-filter>
Wenn Nutzer einen Hosting-Link mit dem Pfad
/__/auth/links
und dem von Ihnen angegebenen Schema und Host öffnen, startet Ihre App die Aktivität mit diesem Intent-Filter, um den Link zu verarbeiten.
Verknüpfung bestätigen und anmelden
Nachdem Sie den Link wie oben beschrieben erhalten haben, prüfen Sie, ob er für die E-Mail-Link-Authentifizierung gedacht ist, und schließen Sie die Anmeldung ab.
Kotlin
val auth = Firebase.auth val intent = intent val emailLink = intent.data.toString() // Confirm the link is a sign-in with email link. if (auth.isSignInWithEmailLink(emailLink)) { // Retrieve this from wherever you stored it val email = "someemail@domain.com" // The client SDK will parse the code from the link for you. auth.signInWithEmailLink(email, emailLink) .addOnCompleteListener { task -> if (task.isSuccessful) { Log.d(TAG, "Successfully signed in with email link!") val result = task.result // You can access the new user via result.getUser() // Additional user info profile *not* available via: // result.getAdditionalUserInfo().getProfile() == null // You can check if the user is new or existing: // result.getAdditionalUserInfo().isNewUser() } else { Log.e(TAG, "Error signing in with email link", task.exception) } } }
Java
FirebaseAuth auth = FirebaseAuth.getInstance(); Intent intent = getIntent(); String emailLink = intent.getData().toString(); // Confirm the link is a sign-in with email link. if (auth.isSignInWithEmailLink(emailLink)) { // Retrieve this from wherever you stored it String email = "someemail@domain.com"; // The client SDK will parse the code from the link for you. auth.signInWithEmailLink(email, emailLink) .addOnCompleteListener(new OnCompleteListener<AuthResult>() { @Override public void onComplete(@NonNull Task<AuthResult> task) { if (task.isSuccessful()) { Log.d(TAG, "Successfully signed in with email link!"); AuthResult result = task.getResult(); // You can access the new user via result.getUser() // Additional user info profile *not* available via: // result.getAdditionalUserInfo().getProfile() == null // You can check if the user is new or existing: // result.getAdditionalUserInfo().isNewUser() } else { Log.e(TAG, "Error signing in with email link", task.getException()); } } }); }
Weitere Informationen zur Anmeldung über den E-Mail-Link in einer Apple-App finden Sie im Leitfaden zu Apple-Plattformen.
Informationen zum Umgang mit der Anmeldung über einen E-Mail-Link in einer Webanwendung finden Sie im Web-Leitfaden.
Verknüpfung/Wiederauthentifizierung über E-Mail-Link
Sie können diese Authentifizierungsmethode auch mit einem vorhandenen Nutzer verknüpfen. Ein Nutzer, der sich beispielsweise zuvor mit einem anderen Anbieter authentifiziert hat, z. B. mit einer Telefonnummer, kann diese Anmeldemethode seinem bestehenden Konto hinzufügen.
Der Unterschied besteht in der zweiten Hälfte des Vorgangs:
Kotlin
// Construct the email link credential from the current URL. val credential = EmailAuthProvider.getCredentialWithLink(email, emailLink) // Link the credential to the current user. Firebase.auth.currentUser!!.linkWithCredential(credential) .addOnCompleteListener { task -> if (task.isSuccessful) { Log.d(TAG, "Successfully linked emailLink credential!") val result = task.result // You can access the new user via result.getUser() // Additional user info profile *not* available via: // result.getAdditionalUserInfo().getProfile() == null // You can check if the user is new or existing: // result.getAdditionalUserInfo().isNewUser() } else { Log.e(TAG, "Error linking emailLink credential", task.exception) } }
Java
// Construct the email link credential from the current URL. AuthCredential credential = EmailAuthProvider.getCredentialWithLink(email, emailLink); // Link the credential to the current user. auth.getCurrentUser().linkWithCredential(credential) .addOnCompleteListener(new OnCompleteListener<AuthResult>() { @Override public void onComplete(@NonNull Task<AuthResult> task) { if (task.isSuccessful()) { Log.d(TAG, "Successfully linked emailLink credential!"); AuthResult result = task.getResult(); // You can access the new user via result.getUser() // Additional user info profile *not* available via: // result.getAdditionalUserInfo().getProfile() == null // You can check if the user is new or existing: // result.getAdditionalUserInfo().isNewUser() } else { Log.e(TAG, "Error linking emailLink credential", task.getException()); } } });
So können Sie auch einen Nutzer mit E-Mail-Link noch einmal authentifizieren, bevor Sie einen sensiblen Vorgang ausführen.
Kotlin
// Construct the email link credential from the current URL. val credential = EmailAuthProvider.getCredentialWithLink(email, emailLink) // Re-authenticate the user with this credential. Firebase.auth.currentUser!!.reauthenticateAndRetrieveData(credential) .addOnCompleteListener { task -> if (task.isSuccessful) { // User is now successfully reauthenticated } else { Log.e(TAG, "Error reauthenticating", task.exception) } }
Java
// Construct the email link credential from the current URL. AuthCredential credential = EmailAuthProvider.getCredentialWithLink(email, emailLink); // Re-authenticate the user with this credential. auth.getCurrentUser().reauthenticateAndRetrieveData(credential) .addOnCompleteListener(new OnCompleteListener<AuthResult>() { @Override public void onComplete(@NonNull Task<AuthResult> task) { if (task.isSuccessful()) { // User is now successfully reauthenticated } else { Log.e(TAG, "Error reauthenticating", task.getException()); } } });
Da der Ablauf jedoch auf einem anderen Gerät enden kann, auf dem der ursprüngliche Nutzer nicht angemeldet war, wird er möglicherweise nicht abgeschlossen. In diesem Fall kann dem Nutzer ein Fehler angezeigt werden, um ihn dazu zu zwingen, den Link auf demselben Gerät zu öffnen. Über den Link kann ein bestimmter Status übergeben werden, um Informationen zur Art der Operation und zur Nutzer-UID bereitzustellen.
Eingestellt: Bestätigung über Firebase Dynamic Links
Für die Authentifizierung von E-Mail-Links wurde bisher Firebase Dynamic Links verwendet, das am 25. August 2025 eingestellt wird.
Wir haben eine alternative Lösung im Firebase Authentication Android SDK v23.2.0 und höher und im Firebase BoM v33.9.0 und höher veröffentlicht.
Wenn Ihre App die alten Links verwendet, sollten Sie Ihre App zum neuen Firebase Hosting-basierten System migrieren.
Eingestellt: Unterscheidung zwischen E-Mail-Passwort und E-Mail-Link
Wenn Sie Ihr Projekt am oder nach dem 15. September 2023 erstellt haben, ist der Schutz vor E-Mail-Aufzählungen standardmäßig aktiviert. Diese Funktion verbessert die Sicherheit der Nutzerkonten Ihres Projekts, deaktiviert aber die fetchSignInMethodsForEmail()
-Methode, die wir zuvor für die Implementierung von Abläufen mit vorangestellter Kennung empfohlen haben.
Sie können den Schutz vor E-Mail-Enumeration für Ihr Projekt zwar deaktivieren, wir raten davon jedoch ab.
Weitere Informationen finden Sie in der Dokumentation zum Schutz vor E-Mail-Enumeration.
Nächste Schritte
Nachdem sich ein Nutzer zum ersten Mal angemeldet hat, wird ein neues Nutzerkonto erstellt und mit den Anmeldedaten verknüpft, d. h. mit dem Nutzernamen und Passwort, der Telefonnummer oder den Informationen zum Authentifizierungsanbieter, mit denen sich der Nutzer angemeldet hat. Dieses neue Konto wird als Teil Ihres Firebase-Projekts gespeichert und kann verwendet werden, um einen Nutzer in allen Apps in Ihrem Projekt zu identifizieren, unabhängig davon, wie er sich anmeldet.
-
In Ihren Apps können Sie die grundlegenden Profilinformationen des Nutzers über das
FirebaseUser
-Objekt abrufen. Weitere Informationen finden Sie unter Nutzer verwalten. In Ihren Firebase Realtime Database- und Cloud Storage-Sicherheitsregeln können Sie die eindeutige Nutzer-ID des angemeldeten Nutzers aus der Variablen
auth
abrufen und damit steuern, auf welche Daten ein Nutzer zugreifen kann.
Sie können Nutzern erlauben, sich über mehrere Authentifizierungsanbieter in Ihrer App anzumelden, indem Sie Anmeldedaten des Authentifizierungsanbieters mit einem vorhandenen Nutzerkonto verknüpfen.
Wenn Sie einen Nutzer abmelden möchten, rufen Sie
signOut
auf:
Kotlin
Firebase.auth.signOut()
Java
FirebaseAuth.getInstance().signOut();