Nutzer erstellen
Sie können einen neuen Nutzer in Ihrem Firebase-Projekt auf vier Arten erstellen:
- Rufen Sie die Methode
createUserWithEmailAndPassword()
auf. - Melden Sie einen Nutzer zum ersten Mal über einen Anbieter föderierter Identität wie Google Sign-In, Facebook Login oder Apple an.
Sie können auch neue Nutzer mit Passwortauthentifizierung im Abschnitt „Authentifizierung“ der Firebase Console auf der Seite „Nutzer“ erstellen.
Profil eines Nutzers abrufen
Verwenden Sie die Eigenschaften von User
, um die Profilinformationen eines Nutzers abzurufen. Es gibt drei Möglichkeiten, ein User
-Objekt abzurufen, das den aktuellen Nutzer repräsentiert:
Die Streams
authStateChanges
,idTokenChanges
unduserChanges
: Ihre Zuhörer erhalten den aktuellenUser
odernull
, wenn kein Nutzer authentifiziert ist:FirebaseAuth.instance .authStateChanges() .listen((User? user) { if (user != null) { print(user.uid); } });
Beim Starten der App wird ein Ereignis ausgelöst, nachdem die Nutzeranmeldedaten (falls vorhanden) aus dem lokalen Speicher wiederhergestellt wurden. Ihre Listener werden also immer aufgerufen, wenn der Nutzerstatus initialisiert wird. Immer wenn sich der Authentifizierungsstatus ändert, wird ein neues Ereignis mit dem aktualisierten Nutzerstatus ausgelöst.
Wenn Sie den Authentifizierungsstatus überwachen, können Sie eine Benutzeroberfläche erstellen, die auf diese Änderungen reagiert. Platzieren Sie
authStateChanges().listen(...)
nicht direkt in der Build-Methode eines Widgets, da bei jedem Neubau ein neues Abo erstellt wird. Wenn Sie die Benutzeroberfläche als Reaktion auf den Authentifizierungsstatus aktualisieren müssen, verwenden SieStreamBuilder
:StreamBuilder<User?>( stream: FirebaseAuth.instance.authStateChanges(), builder: (BuildContext context, AsyncSnapshot<User?> snapshot) { if (snapshot.hasError) { return const Text('Something went wrong'); } if (snapshot.connectionState == ConnectionState.waiting) { return const Text("Loading..."); } if (!snapshot.hasData) { return const SignInScreen(); } final user = snapshot.data!; return HomeScreen(userId: user.uid); }, )
So wird sichergestellt, dass der Widget-Baum automatisch neu erstellt wird, wenn sich der Authentifizierungsstatus des Nutzers ändert.
Das von den Authentifizierungsmethoden (
signIn
-) zurückgegebeneUserCredential
-Objekt: DasUserCredential
-Objekt hat eineuser
-Eigenschaft mit dem aktuellenUser
:final userCredential = await FirebaseAuth.instance.signInWithCredential(credential); final user = userCredential.user; print(user?.uid);
Das Attribut
currentUser
derFirebaseAuth
-Instanz: Wenn Sie sicher sind, dass der Nutzer derzeit angemeldet ist, können Sie über das AttributcurrentUser
aufUser
zugreifen:if (FirebaseAuth.instance.currentUser != null) { print(FirebaseAuth.instance.currentUser?.uid); }
Die
currentUser
kann aus zwei Gründennull
sein:- Der Nutzer ist nicht angemeldet.
- Die Initialisierung des Auth-Objekts ist noch nicht abgeschlossen. Wenn Sie einen Listener verwenden, um den Anmeldestatus des Nutzers zu verfolgen, müssen Sie diesen Fall nicht berücksichtigen.
Anbieterspezifische Profilinformationen eines Nutzers abrufen
Wenn Sie die Profilinformationen abrufen möchten, die von den mit einem Nutzer verknüpften Anmeldeanbietern abgerufen wurden, verwenden Sie das Attribut providerData
. Beispiel:
if (user != null) {
for (final providerProfile in user.providerData) {
// ID of the provider (google.com, apple.com, etc.)
final provider = providerProfile.providerId;
// UID specific to the provider
final uid = providerProfile.uid;
// Name, email address, and profile photo URL
final name = providerProfile.displayName;
final emailAddress = providerProfile.email;
final profilePhoto = providerProfile.photoURL;
}
}
Nutzerprofil aktualisieren
Sie können die allgemeinen Profilinformationen eines Nutzers – den Anzeigenamen und die Profilbild-URL – mit den update
-Methoden aktualisieren. Beispiel:
await user?.updateDisplayName("Jane Q. User");
await user?.updatePhotoURL("https://example.com/jane-q-user/profile.jpg");
E-Mail-Adresse eines Nutzers festlegen
Sie können die E-Mail-Adresse eines Nutzers mit der Methode updateEmail()
festlegen. Beispiel:
await user?.updateEmail("janeq@example.com");
Bestätigungs-E-Mail an einen Nutzer senden
Mit der Methode sendEmailVerification()
können Sie einem Nutzer eine E‑Mail zur Adressbestätigung senden. Beispiel:
await user?.sendEmailVerification();
Sie können die E-Mail-Vorlage, die im Bereich „Authentifizierung“ der Firebase Console verwendet wird, auf der Seite „E-Mail-Vorlagen“ anpassen. Weitere Informationen finden Sie in der Firebase-Hilfe unter E-Mail-Vorlagen.
Es ist auch möglich, den Status über eine Continue-URL zu übergeben, um nach dem Senden einer Bestätigungs-E-Mail zurück zur App weiterzuleiten.
Außerdem können Sie die Bestätigungs-E-Mail lokalisieren, indem Sie den Sprachcode in der Auth-Instanz aktualisieren, bevor Sie die E-Mail senden. Beispiel:
await FirebaseAuth.instance.setLanguageCode("fr");
await user?.sendEmailVerification();
Nutzerpasswort festlegen
Mit der Methode updatePassword()
können Sie das Passwort eines Nutzers festlegen. Beispiel:
await user?.updatePassword(newPassword);
E‑Mail zum Zurücksetzen des Passworts senden
Mit der Methode sendPasswordResetEmail()
können Sie eine E-Mail zum Zurücksetzen des Passworts an einen Nutzer senden. Beispiel:
await FirebaseAuth.instance
.sendPasswordResetEmail(email: "user@example.com");
Sie können die E-Mail-Vorlage, die im Bereich „Authentifizierung“ der Firebase Console verwendet wird, auf der Seite „E-Mail-Vorlagen“ anpassen. Weitere Informationen finden Sie in der Firebase-Hilfe unter E-Mail-Vorlagen.
Es ist auch möglich, den Status über eine Continue-URL zu übergeben, um nach dem Senden einer E‑Mail zum Zurücksetzen des Passworts zur App zurückzuleiten.
Außerdem können Sie die E-Mail zum Zurücksetzen des Passworts lokalisieren, indem Sie den Sprachcode in der Auth-Instanz aktualisieren, bevor Sie die E-Mail senden. Beispiel:
await FirebaseAuth.instance.setLanguageCode("fr");
Sie können auch E‑Mails zum Zurücksetzen des Passworts über die Firebase Console senden.
Nutzer löschen
Sie können ein Nutzerkonto mit der Methode delete()
löschen. Beispiel:
await user?.delete();
Sie können Nutzer auch im Abschnitt „Authentifizierung“ der Firebase Console auf der Seite „Nutzer“ löschen.
Nutzer neu authentifizieren
Einige sicherheitsrelevante Aktionen, z. B. das Löschen eines Kontos, das Festlegen einer primären E‑Mail-Adresse und das Ändern eines Passworts, erfordern, dass der Nutzer sich vor Kurzem angemeldet hat. Wenn Sie eine dieser Aktionen ausführen und der Nutzer sich vor zu langer Zeit angemeldet hat, schlägt die Aktion fehl und es wird eine FirebaseAuthException
mit dem Code requires-recent-login
ausgegeben.
In diesem Fall müssen Sie den Nutzer noch einmal authentifizieren. Rufen Sie dazu neue Anmeldedaten vom Nutzer ab und übergeben Sie die Anmeldedaten an reauthenticate
. Beispiel:
// Prompt the user to re-provide their sign-in credentials.
// Then, use the credentials to reauthenticate:
await user?.reauthenticateWithCredential(credential);
Nutzerkonten importieren
Mit dem Firebase CLI-Befehl auth:import
können Sie Nutzerkonten aus einer Datei in Ihr Firebase-Projekt importieren. Beispiel:
firebase auth:import users.json --hash-algo=scrypt --rounds=8 --mem-cost=14