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
Verwenden Sie Swift Package Manager, um Firebase-Abhängigkeiten zu installieren und zu verwalten.
- Öffnen Sie Ihr App-Projekt und gehen Sie in Xcode zu File > Add Packages (Datei > Pakete hinzufügen).
- Fügen Sie bei entsprechender Aufforderung das Firebase Apple Platforms SDK-Repository hinzu:
- Wählen Sie die Bibliothek Firebase Authentication aus.
- Fügen Sie das Flag
-ObjC
im Abschnitt Other Linker Flags (Weitere Verknüpfungsmerker) der Build-Einstellungen des Ziels hinzu. - Wenn Sie fertig, beginnt Xcode automatisch, Ihre Abhängigkeiten im Hintergrund aufzulösen und herunterzuladen.
https://github.com/firebase/firebase-ios-sdk.git
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 sendSignInLink
aufgerufen, um Firebase zu bitten, den Authentifizierungslink an die E-Mail-Adresse des Nutzers zu senden.
Erstellen Sie das
ActionCodeSettings
-Objekt, das Firebase Anweisungen zum Erstellen des E-Mail-Links enthält. 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).iOSBundleID
undandroidPackageName
: 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.
Swift
let actionCodeSettings = ActionCodeSettings() actionCodeSettings.url = URL(string: "https://www.example.com") // The sign-in operation has to always be completed in the app. actionCodeSettings.handleCodeInApp = true actionCodeSettings.setIOSBundleID(Bundle.main.bundleIdentifier!) actionCodeSettings.setAndroidPackageName("com.example.android", installIfNotAvailable: false, minimumVersion: "12")
Objective-C
FIRActionCodeSettings *actionCodeSettings = [[FIRActionCodeSettings alloc] init]; [actionCodeSettings setURL:[NSURL URLWithString:@"https://www.example.com"]]; // The sign-in operation has to always be completed in the app. actionCodeSettings.handleCodeInApp = YES; [actionCodeSettings setIOSBundleID:[[NSBundle mainBundle] bundleIdentifier]]; [actionCodeSettings setAndroidPackageName:@"com.example.android" installIfNotAvailable:NO minimumVersion:@"12"];
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.
Swift
Auth.auth().sendSignInLink(toEmail: email, actionCodeSettings: actionCodeSettings) { error in // ... if let error = error { self.showMessagePrompt(error.localizedDescription) return } // The link was successfully sent. Inform the user. // Save the email locally so you don't need to ask the user for it again // if they open the link on the same device. UserDefaults.standard.set(email, forKey: "Email") self.showMessagePrompt("Check your email for link") // ... }
Objective-C
[[FIRAuth auth] sendSignInLinkToEmail:email actionCodeSettings:actionCodeSettings completion:^(NSError *_Nullable error) { // ... if (error) { [self showMessagePrompt:error.localizedDescription]; return; } // The link was successfully sent. Inform the user. // Save the email locally so you don't need to ask the user for it again // if they open the link on the same device. [NSUserDefaults.standardUserDefaults setObject:email forKey:@"Email"]; [self showMessagePrompt:@"Check your email for link"]; // ... }];
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 Auth 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 Anmelde-E-Mail ihre E-Mail-Adresse lokal. Verwenden Sie dann diese Adresse, um den Vorgang abzuschließen.
Nach Abschluss der Anmeldung werden alle zuvor nicht bestätigten Anmeldemechanismen für den Nutzer entfernt und alle vorhandenen Sitzungen ungültig gemacht. Wenn beispielsweise jemand 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 demselben Konto anmeldet.
Anmeldung in einer mobilen Apple-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 dazu finden Sie im Hilfeartikel Universelle Links und zugehörige Domains unter iOS.
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.
Apple-Anwendungen konfigurieren:
Sie müssen die ausgewählte Domain als verknüpfte Domain für App-Links konfigurieren. Öffnen Sie in Xcode den Tab Signing & Capabilities (Signatur und Funktionen) des Ziels und fügen Sie der Funktion „Associated Domains“ (Verknüpfte Domains) die Firebase Hosting-Domains aus dem vorherigen Schritt hinzu. Wenn Sie die Standarddomain Firebase Hosting verwenden, ist das
.applinks:PROJECT_ID.firebaseapp.com
Weitere Informationen finden Sie in der Apple-Dokumentation unter Verknüpfte Domains unterstützen.
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.
Swift
if Auth.auth().isSignIn(withEmailLink: link) { Auth.auth().signIn(withEmail: email, link: self.link) { user, error in // ... } }
Objective-C
if ([[FIRAuth auth] isSignInWithEmailLink:link]) { [[FIRAuth auth] signInWithEmail:email link:link completion:^(FIRAuthDataResult * _Nullable authResult, NSError * _Nullable error) { // ... }]; }
Informationen zum Umgang mit der Anmeldung über einen E-Mail-Link in einer Android-App findest du im Android-Leitfaden.
Informationen zum Umgang mit der Anmeldung über den 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:
Swift
let credential = EmailAuthCredential.credential(withEmail:email link:link) Auth.auth().currentUser?.link(with: credential) { authData, error in if (error) { // And error occurred during linking. return } // The provider was successfully linked. // The phone user can now sign in with their phone number or email. }
Objective-C
FIRAuthCredential *credential = [FIREmailAuthProvider credentialWithEmail:email link:link]; [FIRAuth auth].currentUser linkWithCredential:credential completion:^(FIRAuthDataResult *_Nullable result, NSError *_Nullable error) { if (error) { // And error occurred during linking. return; } // The provider was successfully linked. // The phone user can now sign in with their phone number or email. }];
So können Sie auch einen Nutzer mit E-Mail-Link noch einmal authentifizieren, bevor Sie einen sensiblen Vorgang ausführen.
Swift
let credential = EmailAuthProvider.credential(withEmail:email link:link) Auth.auth().currentUser?.reauthenticate(with: credential) { authData, error in if (error) { // And error occurred during re-authentication. return } // The user was successfully re-authenticated. }
Objective-C
FIRAuthCredential *credential = [FIREmailAuthCredential credentialWithEmail:email link:link]; [FIRAuth auth].currentUser reauthenticateWithCredential:credential completion:^(FIRAuthDataResult *_Nullable result, NSError *_Nullable error) { if (error) { // And error occurred during re-authentication return; } // The user was successfully re-authenticated. }];
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
Vor der Version 11.8.0 des Firebase Authentication iOS SDK wurde für die Anmeldung über einen E-Mail-Link Firebase Dynamic Links verwendet, um Anmeldelinks in der richtigen App zu öffnen. Diese Bestätigungslinks werden eingestellt, da Firebase Dynamic Links am 25. August 2025 eingestellt wird.
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 unter Schutz vor E-Mail-Aufzählung aktivieren oder deaktivieren.
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
User
-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.
Swift
let firebaseAuth = Auth.auth() do { try firebaseAuth.signOut() } catch let signOutError as NSError { print("Error signing out: %@", signOutError) }
Objective-C
NSError *signOutError; BOOL status = [[FIRAuth auth] signOut:&signOutError]; if (!status) { NSLog(@"Error signing out: %@", signOutError); return; }
Sie können auch Code zur Fehlerbehandlung für alle Authentifizierungsfehler hinzufügen. Weitere Informationen finden Sie unter Fehler verarbeiten.