Mit Firebase Authentication können Sie einen Nutzer anmelden, 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.
- Geringeres Risiko der Wiederverwendung von Passwörtern in verschiedenen Anwendungen, was die Sicherheit selbst gut ausgewählter Passwörter untergraben kann.
- Die Möglichkeit, einen Nutzer zu authentifizieren und gleichzeitig zu bestätigen, dass er der rechtmäßige Inhaber einer E-Mail-Adresse ist.
- Ein Nutzer benötigt nur ein zugängliches E-Mail-Konto, um sich anzumelden. Sie müssen keine Telefonnummer oder kein Konto in sozialen Medien besitzen.
- Ein Nutzer kann sich sicher anmelden, ohne ein Passwort eingeben oder sich eines merken zu müssen. Das kann auf einem Mobilgerät umständlich sein.
- Ein bestehender Nutzer, der sich zuvor mit einer E‑Mail-Kennung (Passwort oder föderiert) angemeldet hat, kann auf die Anmeldung nur mit der E‑Mail-Adresse umgestellt werden. So kann sich ein Nutzer, der sein Passwort vergessen hat, trotzdem 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 Firebase Authentication-Bibliothek aus.
- Fügen Sie das Flag
-ObjC
dem Abschnitt Other Linker Flags (Weitere Linker-Flags) der Build-Einstellungen Ihres 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
E-Mail-Link-Anmeldung für Ihr Firebase-Projekt aktivieren
Wenn Sie Nutzer über einen E-Mail-Link anmelden möchten, 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 mit E‑Mail-Adresse und Passwort muss aktiviert sein, damit die Anmeldung mit E‑Mail-Link verwendet werden kann.
- Aktivieren Sie im selben Abschnitt die Anmeldemethode E-Mail-Link (Anmeldung ohne Passwort).
- Klicken Sie auf Speichern.
Senden Sie einen Authentifizierungslink an die E‑Mail-Adresse des Nutzers.
Zum Initiieren des Authentifizierungsablaufs wird eine Schnittstelle angezeigt, in der der Nutzer aufgefordert wird, seine E-Mail-Adresse anzugeben, und dann sendSignInLink
aufzurufen, um Firebase aufzufordern, 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 gibt. Legen Sie die Werte für die folgenden Felder fest:url
: Der einzubettende Deeplink und alle zusätzlichen Statusinformationen, die übergeben werden sollen. Die Domain des Links muss in der Firebase Console auf der Liste der autorisierten Domains auf der weißen Liste stehen. Sie finden die Liste auf dem Tab „Anmeldemethode“ („Authentifizierung“ -> „Anmeldemethode“).
iOSBundleID
undandroidPackageName
: Hilft Firebase Authentication dabei, zu ermitteln, ob ein reiner Weblink oder ein mobiler Link erstellt werden soll, der auf einem Android- oder Apple-Gerät geöffnet wird.handleCodeInApp
: Auf „true“ festlegen. Die Anmeldung muss immer in der App erfolgen, anders als bei anderen Out-of-Band-E-Mail-Aktionen (Passwortzurücksetzung und E-Mail-Bestätigungen). Das liegt daran, dass der Nutzer am Ende des Ablaufs angemeldet sein und sein Authentifizierungsstatus in der App gespeichert werden soll.linkDomain
: Wenn benutzerdefinierte Hosting-Linkdomains für ein Projekt 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.
Senden Sie den Authentifizierungslink an die E-Mail-Adresse des Nutzers und speichern Sie die E-Mail-Adresse des Nutzers für den Fall, dass der Nutzer die E-Mail-Anmeldung auf demselben Gerät abschließt.
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 mit dem E‑Mail-Link abschließen
Sicherheitsbedenken
Damit ein Anmeldelink nicht verwendet werden kann, um sich als ein nicht vorgesehener Nutzer oder auf einem nicht vorgesehenen 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 ihn angefordert haben. Speichern Sie dazu die E-Mail-Adresse lokal, wenn Sie die Anmelde-E-Mail senden. Verwenden Sie dann diese Adresse, um den Vorgang abzuschließen.
Nach Abschluss der Anmeldung werden alle zuvor nicht bestätigten Anmeldemechanismen des Nutzers 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 die Inhaberschaft beansprucht 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 parst und die Anmeldung dann abschließt. Weitere Informationen zu universellen Links und zugehörigen 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. Für Sie wurde bereits eine Standarddomain für Firebase Hosting 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 Anwendungen geöffnet wird, rufen Sie Ihre Standardwebsite auf und notieren Sie sich Ihre Standarddomain Hosting. Eine Standarddomain vom Typ Hosting sieht in der Regel so aus:
.PROJECT_ID.firebaseapp.com
Sie benötigen diesen Wert, wenn Sie Ihre App so konfigurieren, dass sie den eingehenden Link abfängt.
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 Associated Domain (verknüpfte Domain) für App-Links konfigurieren. Um das Recht in Ihrer App einzurichten, öffnen Sie in Xcode den Tab Signing & Capabilities des Ziels und fügen Sie die Firebase Hosting-Domains aus dem vorherigen Schritt dem Recht „Associated Domains“ hinzu. Wenn Sie die Standarddomain Firebase Hosting verwenden, ist dies
.applinks:PROJECT_ID.firebaseapp.com
Weitere Informationen finden Sie in der Dokumentation von Apple unter „Supporting associated domains“.
Link 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 vorgesehen ist, und melden Sie sich an.
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 mit E-Mail-Link in einer Android-Anwendung finden Sie im Android-Leitfaden.
Informationen zum Verarbeiten der Anmeldung mit E‑Mail-Link in einer Webanwendung finden Sie im Web-Leitfaden.
Verknüpfung/erneute Authentifizierung mit E‑Mail-Link
Sie können diese Authentifizierungsmethode auch mit einem vorhandenen Nutzer verknüpfen. Wenn sich ein Nutzer beispielsweise zuvor bei einem anderen Anbieter, z. B. mit einer Telefonnummer, authentifiziert hat, kann er diese Anmeldemethode zu seinem bestehenden Konto hinzufügen.
Der Unterschied liegt 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. }];
Dies kann auch verwendet werden, um einen Nutzer mit E-Mail-Link neu zu authentifizieren, bevor ein vertraulicher Vorgang ausgeführt wird.
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 könnte, 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 zu zwingen, den Link auf demselben Gerät zu öffnen. Einige Status können im Link übergeben werden, um Informationen zum Vorgangstyp und zur Nutzer-UID bereitzustellen.
Verworfen: Firebase Dynamic Links-basierte Bestätigung
Vor dem Firebase Authentication iOS SDK v11.8.0 wurde für die Anmeldung per E-Mail-Link Firebase Dynamic Links verwendet, um Anmeldelinks in der richtigen App zu öffnen. Diese Bestätigungslinks sind veraltet, da Firebase Dynamic Links am 25. August 2025 eingestellt wird.
Wenn Ihre App die alten Links verwendet, sollten Sie sie auf das neue Firebase Hosting-basierte System umstellen.
Einstellung: Unterscheidung zwischen E-Mail-Adresse/Passwort und E-Mail-Link
Wenn Sie Ihr Projekt am oder nach dem 15. September 2023 erstellt haben, ist der Schutz vor der Aufzählung von E‑Mail-Adressen standardmäßig aktiviert. Diese Funktion verbessert die Sicherheit der Nutzerkonten Ihres Projekts, deaktiviert aber die fetchSignInMethodsForEmail()
-Methode, die wir früher für die Implementierung von Abläufen empfohlen haben, bei denen zuerst die Kennung eingegeben wird.
Sie können den Schutz vor E-Mail-Enumeration für Ihr Projekt zwar deaktivieren, wir raten jedoch davon ab.
Weitere Informationen finden Sie unter Schutz vor E-Mail-Aufzählung aktivieren oder deaktivieren.
Nächste Schritte
Wenn sich ein Nutzer zum ersten Mal anmeldet, wird ein neues Nutzerkonto erstellt und mit den Anmeldedaten verknüpft, mit denen sich der Nutzer angemeldet hat, also mit dem Nutzernamen und Passwort, der Telefonnummer oder den Informationen des Authentifizierungsanbieters. 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 sich der Nutzer anmeldet.
-
In Ihren Apps können Sie die grundlegenden Profilinformationen des Nutzers aus dem
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 mit mehreren Authentifizierungsanbietern in Ihrer App anzumelden, indem Sie Anmeldedaten des Authentifizierungsanbieters mit einem vorhandenen Nutzerkonto verknüpfen.
Rufen Sie
signOut:
auf, um einen Nutzer abzumelden.
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; }
Möglicherweise möchten Sie auch Code zur Fehlerbehandlung für alle Authentifizierungsfehler hinzufügen. Weitere Informationen finden Sie unter Fehlerbehandlung.