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. In diesem Prozess E-Mail-Adresse ebenfalls bestätigt.
Die Anmeldung per E-Mail hat zahlreiche Vorteile:
- Einfache Registrierung und Anmeldung
- Geringeres Risiko der anwendungsübergreifenden Wiederverwendung von Passwörtern, was die Sicherheit beeinträchtigen kann sogar sorgfältig ausgewählter Passwörter.
- Die Möglichkeit, einen Nutzer zu authentifizieren und gleichzeitig zu bestätigen, dass der Nutzer der rechtmäßiger Inhaber einer E-Mail-Adresse.
- Ein Nutzer benötigt nur ein zugängliches E-Mail-Konto, um sich anzumelden. Keine Eigentumsrechte an Eine Telefonnummer oder ein Konto bei einem sozialen Netzwerk ist 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.
- Nutzer, die sich zuvor mit einer E-Mail-ID (Passwort) angemeldet haben oder föderiert) aktualisiert werden, sodass Sie sich ganz einfach mit der E-Mail-Adresse anmelden können. 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 Firebase Authentication-Bibliothek aus.
- Fügen Sie das Flag
-ObjC
dem Bereich Other Linker Flags 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 das 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 per E-Mail-Link verwendet werden kann.
- Aktivieren Sie im selben Abschnitt die Anmeldung über 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.
Konstruieren Sie das
ActionCodeSettings
-Objekt, das Firebase Anweisungen zur Erstellung des E-Mail-Links. 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 Firebase Console-Liste der autorisierte Domains. Diese finden Sie auf dem Tab „Anmeldemethode“. (Authentifizierung -> Anmeldemethode).
- iOSBundleID und androidPackageName: Die Apps, die verwendet werden sollen, wenn der Anmeldelink auf einem Android- oder Apple-Gerät geöffnet wird. Weitere Informationen zum Konfigurieren von Firebase Dynamic Links, um E-Mail-Aktionslinks über mobile Apps zu öffnen
- handleCodeInApp: Legen Sie den Wert auf „true“ fest. 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 am Ende des Ablaufs Der Nutzer muss angemeldet sein und sein Auth-Status bleibt im in der App.
- dynamicLinkDomain: Wenn für ein Projekt mehrere benutzerdefinierte Dynamic Link-Domains definiert sind, geben Sie an, welche verwendet werden soll, wenn der Link über eine bestimmte mobile App (z. B.
example.page.link
) geöffnet werden soll. Andernfalls wird automatisch die erste Domain ausgewählt.
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 in der Status in E-Mail-Aktionen übergeben .
Fragen Sie den Nutzer nach seiner E-Mail-Adresse.
Authentifizierungslink an die E-Mail-Adresse des Nutzers senden und speichern falls der Nutzer die E-Mail-Anmeldung auf demselben Gerät durchführt.
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
Um zu verhindern, dass ein Anmeldelink zur Anmeldung als unbeabsichtigter Nutzer oder auf unbeabsichtigtes Gerät ist, erfordert Firebase Auth, dass die E-Mail-Adresse des Nutzers wenn Sie den Anmeldevorgang abschließen. Diese E-Mail muss für eine erfolgreiche Anmeldung muss die 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 derselben um den Link anzufordern, indem er seine E-Mail-Adresse lokal speichert, Anmelde-E-Mail senden. Verwenden Sie diese Adresse dann, 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 demselben E-Mail-Adresse und Passwort, wird das Passwort des Nutzers entfernt, um zu verhindern, Identitätsdiebstahl, der die Inhaberschaft beansprucht und das unbestätigte Konto erstellt hat melden Sie sich wieder mit demselben Konto an.
Anmeldung in einer mobilen Apple-App abschließen
Firebase Authentication verwendet Firebase Dynamic Links, 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.
Firebase Dynamic Links konfigurieren
Firebase Auth verwendet Firebase Dynamic Links beim Senden einer der in einer mobilen App geöffnet werden soll. Damit Sie diese Funktion verwenden können, müssen Dynamic Links in der Firebase Console konfiguriert werden.
Firebase Dynamic Links aktivieren:
- Öffnen Sie in der Firebase Console den Bereich Dynamic Links.
-
Wenn Sie die Dynamic Links-Nutzungsbedingungen noch nicht akzeptiert und keine Dynamic Links-Domain erstellt haben, tun Sie dies jetzt.
Wenn Sie bereits eine Dynamic Links-Domain erstellt haben, notieren Sie sich diese. Ein Dynamic Links Domain sieht normalerweise wie im folgenden Beispiel aus:
example.page.link
Sie benötigen diesen Wert, wenn Sie Ihre Apple- oder Android-App so konfigurieren, dass den eingehenden Link abfangen.
Apple-Anwendungen konfigurieren:
- Wenn Sie vorhaben, diese Links von Ihrer Anwendung aus zu handhaben, Die Bundle-ID muss in der Firebase Console angegeben werden Projekteinstellungen. Die App Store-ID und der Apple Developer Die Team-ID muss ebenfalls angegeben werden.
- Sie müssen auch Ihre E-Mail-Aktions-Handler-Domain als
Verknüpfte Domain in den App-Funktionen. Standardmäßig enthält der Parameter
Der E-Mail-Aktions-Handler wird in einer Domain wie im folgenden Beispiel gehostet:
APP_ID.firebaseapp.com
- Wenn Sie Ihre App für iOS-Version 8 oder niedriger bereitstellen möchten, müssen Sie Ihre Paket-ID als benutzerdefiniertes Schema für eingehende URLs.
- Weitere Informationen finden Sie unter Anleitung zum Empfangen von dynamischen Links für die Apple-Plattform.
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 bestimmt 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) { // ... }]; }
Weitere Informationen zum Umgang mit der Anmeldung über einen E-Mail-Link auf einem Android-Gerät finden Sie im Android-Leitfaden.
Informationen zum Umgang mit der Anmeldung über einen 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. 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. }];
Der Ablauf könnte jedoch auf einem anderen Gerät enden, auf dem der ursprüngliche Nutzer nicht angemeldet war, wird dieser Vorgang 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: Unterscheidung zwischen E-Mail-Passwort und E-Mail-Link
Wenn Sie Ihr Projekt am oder nach dem 15. September 2023 erstellt haben, wird eine Aufzählung per E-Mail gesendet.
ist 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 die mit den Anmeldedaten verknüpft sind, d. h. Nutzername und Passwort, oder Authentifizierungsanbieter-Informationen – also für den Nutzer, mit dem 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.
-
Die grundlegenden Profilinformationen der Nutzer finden Sie in Ihren Apps über die
User
-Objekt enthält. 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 Mehrfachauthentifizierung in Ihrer App anzumelden indem Sie die Anmeldedaten des Authentifizierungsanbieters mit einem eines bestehenden Nutzerkontos.
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 den gesamten Authentifizierungsbereich hinzufügen. Fehler. Siehe Fehler beheben.