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 gewählter Passwörter untergraben kann
- Möglichkeit, einen Nutzer zu authentifizieren und gleichzeitig zu bestätigen, dass er der rechtmäßige Inhaber einer E-Mail-Adresse ist
- Für die Anmeldung benötigt ein Nutzer nur ein zugängliches E-Mail-Konto. Der Besitz einer Telefonnummer oder eines Kontos in sozialen Medien ist nicht erforderlich.
- 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-Kennung (Passwort oder föderiert) angemeldet hat, kann so aktualisiert werden, dass er sich nur mit der E-Mail-Adresse anmelden kann. Wenn ein Nutzer beispielsweise sein Passwort vergessen hat, kann er sich 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
-ObjCim Bereich Other Linker Flags (Weitere Verknüpfungsmerker) 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
Anmeldung per E-Mail-Link für Ihr Firebase-Projekt aktivieren
Wenn sich Nutzer per E-Mail-Link anmelden sollen, müssen Sie zuerst den E-Mail-Anbieter und die Anmeldemethode per E-Mail-Link für Ihr Firebase-Projekt aktivieren:
Rufen Sie in der Firebase Console Security > Authentication auf.
Aktivieren Sie auf dem Tab Sign-in method (Anmeldemethode) den Anmeldeanbieter Email/Password (E-Mail-Adresse/Passwort). Hinweis: Die Anmeldung per E-Mail-Adresse/Passwort muss aktiviert sein, um die Anmeldung per E-Mail-Link verwenden zu können.
Aktivieren Sie im selben Bereich den Anbieter Email link (passwordless sign-in) (E-Mail-Link (Anmeldung ohne Passwort)).
Klicken Sie auf Speichern.
Authentifizierungslink an die E-Mail-Adresse des Nutzers senden
Um den Authentifizierungsvorgang zu starten, präsentieren Sie dem Nutzer eine Schnittstelle, in der er aufgefordert wird, seine E-Mail-Adresse anzugeben. Rufen Sie dann sendSignInLink auf, 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 weitergegeben werden sollen. Fügen Sie Ihre Domain der Liste der autorisierten Domains hinzu, falls noch nicht geschehen:Rufen Sie in der Firebase Console den Security > Authentication > Settings tab auf.
Klicken Sie im Bereich Authorized domains (Autorisierte Domains) auf Add domain (Domain hinzufügen) und fügen Sie Ihre Domain hinzu.
iOSBundleIDundandroidPackageName: Helfen Firebase Authentication zu bestimmen , 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 abgeschlossen werden, anders als bei anderen E-Mail-Aktionen außerhalb des Ablaufs (Passwortzurücksetzung und E-Mail-Bestätigung). Das liegt daran, dass der Nutzer am Ende des Ablaufs angemeldet sein und sein Authentifizierungsstatus in der App gespeichert sein muss.linkDomain: Wenn für ein Projekt benutzerdefinierteHosting Link-Domains definiert sind, geben Sie an, welche verwendet werden soll, wenn der Link von einer bestimmten mobilen App geöffnet wird. Andernfalls wird automatisch die Standarddomain ausgewählt (z. B. ).PROJECT_ID.firebaseapp.comdynamicLinkDomain: 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
ActionCodeSettingsfinden Sie im Abschnitt Statusinformationen in E-Mail-Aktionen.Fragen Sie 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, falls er 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 anderer Nutzer oder auf einem anderen Gerät anzumelden, muss in 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 Vorgang für Nutzer optimieren, die den Anmeldelink auf demselben Gerät öffnen, auf dem sie ihn angefordert haben. Speichern Sie dazu ihre 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 vorherigen nicht bestätigten Anmeldemechanismen für den Nutzer entfernt und alle bestehenden 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, damit sich der Betrüger, der das Konto beansprucht und erstellt hat, nicht noch einmal mit demselben Konto anmelden kann.
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 mit einer mobilen App abgeschlossen werden kann, muss die App so konfiguriert sein, dass sie den eingehenden App-Link erkennt, den zugrunde liegenden Deeplink parst und dann die Anmeldung abschließt. Weitere Informationen dazu finden Sie unter 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. Für Sie wurde bereits eine Standard-Firebase Hosting Domain konfiguriert.
Firebase Hosting Domains konfigurieren:
Rufen Sie in der Firebase Console Hosting & Serverless > Hosting auf.
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 Ihre Standard Hosting Domain. Eine Standard-Hosting Domain sieht in der Regel so aus:
.PROJECT_ID.firebaseapp.comSie 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 sie für die Domain des Links verwenden.
Apple-Anwendungen konfigurieren:
Sie müssen die ausgewählte Domain als zugehörige Domain für App-Links konfigurieren. Um die Berechtigung in Ihrer App einzurichten, öffnen Sie in Xcode den Tab Signing & Capabilities (Signieren und Funktionen) des Ziels und fügen Sie die Firebase Hosting-Domains aus dem vorherigen Schritt der Funktion „Associated Domains“ (Zugehörige Domains) hinzu. Wenn Sie die Standard Firebase Hosting Domain verwenden, ist das
.applinks:PROJECT_ID.firebaseapp.comWeitere Informationen finden Sie auf der Dokumentationswebsite von Apple unter Supporting associated domains (Unterstützung zugehöriger Domains).
Link bestätigen und anmelden
Nachdem Sie den Link wie oben beschrieben erhalten haben, bestätigen Sie, dass er für die E-Mail-Link-Authentifizierung vorgesehen 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 per E-Mail-Link in einer Android Anwendung finden Sie im Android-Leitfaden.
Informationen zum Umgang mit der Anmeldung per E-Mail-Link in einer Web anwendung finden Sie im Web-Leitfaden.
Verknüpfung/erneute Authentifizierung mit E-Mail-Link
Sie können diese Authentifizierungsmethode auch mit einem bestehenden Nutzer verknüpfen. Ein Nutzer, der sich zuvor mit einem anderen Anbieter authentifiziert hat, z. B. mit einer Telefonnummer, kann diese Anmeldemethode 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 Vorgang 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. Im Link können einige Statusinformationen weitergegeben werden, um Informationen zum Vorgangstyp und zur Nutzer-UID zu liefern.
Eingestellt: Bestätigung auf Grundlage von Firebase Dynamic Links
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 eingestellt, da Firebase Dynamic Links am 25. August 2025 eingestellt wird.
Wenn Ihre App die alten Links verwendet, sollten Sie Ihre App migrieren zum neuen Firebase Hosting basierten System.
Eingestellt: 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 E-Mail-Enumeration standardmäßig aktiviert. Diese Funktion verbessert die Sicherheit der Nutzerkonten Ihres Projekts, deaktiviert jedoch die Methode fetchSignInMethodsForEmail(), die wir zuvor für die Implementierung von Abläufen empfohlen haben, bei denen die Kennung zuerst abgefragt wird.
Sie können den Schutz vor E-Mail-Enumeration für Ihr Projekt deaktivieren, wir raten jedoch davon ab.
Weitere Informationen finden Sie unter Schutz vor E-Mail-Enumeration 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 des Authentifizierungsanbieters, 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 Ihres Projekts 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 unter Benutzer verwalten. In den Firebase Realtime Database und Cloud Storage Sicherheitsregeln können Sie die eindeutige Nutzer-ID des angemeldeten Nutzers aus der Variablen
authabrufen und damit steuern, auf welche Daten ein Nutzer zugreifen kann.
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; }
Sie können auch Code zur Fehlerbehandlung für alle Authentifizierungs fehler hinzufügen. Weitere Informationen zu Fehlerbehandlung.