Nutzer erstellen
Sie haben folgende Möglichkeiten, einen neuen Nutzer zu erstellen:
Über Ihre App: Erstellen Sie einen neuen Nutzer in Ihrem Firebase-Projekt, indem Sie die
createUserWithEmailAndPassword()Methode aufrufen oder einen Nutzer zum ersten Mal mit einem föderierten Identitätsanbieter anmelden, z. B. Google-Anmeldung, Facebook-Anmeldung oder Apple.In der Firebase Konsole: Erstellen Sie einen neuen Nutzer mit Passwortauthentifizierung auf dem Tab Sicherheit > Authentifizierung > Nutzer.
Nutzerprofil 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 darstellt:
Die Streams
authStateChanges,idTokenChangesunduserChanges: Ihre Listener erhalten den aktuellenUserodernull, 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 Anmeldedaten des Nutzers (falls vorhanden) aus dem lokalen Speicher wiederhergestellt wurden. Das bedeutet, dass Ihre Listener immer aufgerufen werden, wenn der Nutzerstatus initialisiert wird. Wenn sich der Authentifizierungsstatus ändert, wird ein neues Ereignis mit dem aktualisierten Nutzerstatus ausgelöst.
Wenn Sie den Authentifizierungsstatus beobachten, 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 Neuaufbau 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 der Widget-Baum automatisch neu aufgebaut, wenn sich der Authentifizierungsstatus des Nutzers ändert.
Das
UserCredential-Objekt, das von den Authentifizierungsmethoden (signIn-) zurückgegeben wird: DasUserCredential-Objekt hat eineuser-Eigenschaft mit dem aktuellenUser:final userCredential = await FirebaseAuth.instance.signInWithCredential(credential); final user = userCredential.user; print(user?.uid);Die
currentUser-Eigenschaft derFirebaseAuth-Instanz: Wenn Sie sicher sind, dass der Nutzer derzeit angemeldet ist, können Sie über diecurrentUser-Eigenschaft aufUserzugreifen:if (FirebaseAuth.instance.currentUser != null) { print(FirebaseAuth.instance.currentUser?.uid); }currentUserkann aus zwei Gründennullsein:- Der Nutzer ist nicht angemeldet.
- Die Initialisierung des Authentifizierungsobjekts 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
Verwenden Sie die Eigenschaft providerData, um die Profilinformationen abzurufen, die von den mit einem Nutzer verknüpften Anmeldeanbietern abgerufen wurden. 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
Mit den Methoden update können Sie die grundlegenden Profilinformationen eines Nutzers aktualisieren, z. B. den Anzeigenamen
und die URL des Profilfotos. 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 eine E-Mail zur Bestätigung der Adresse an einen Nutzer senden. Beispiel:
await user?.sendEmailVerification();
Sie können anpassen, welche E-Mail-Vorlage verwendet wird. Gehen Sie dazu in der Firebase Konsole zu Sicherheit > Authentifizierung > Vorlagen. Weitere Informationen finden Sie unter E-Mail-Vorlagen in der Firebase-Hilfe.
Sie können auch einen Zustand über eine URL zur Weiterleitung übergeben, um nach dem Senden einer Bestätigungs-E-Mail zur App zurückzuleiten.
Außerdem können Sie die Bestätigungs-E-Mail lokalisieren, indem Sie den Sprachcode in der Authentifizierungsinstanz aktualisieren, bevor Sie die E-Mail senden. Beispiel:
await FirebaseAuth.instance.setLanguageCode("fr");
await user?.sendEmailVerification();
Passwort eines Nutzers festlegen
Sie können das Passwort eines Nutzers mit der Methode updatePassword() 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 anpassen, welche E-Mail-Vorlage verwendet wird. Gehen Sie dazu in der Firebase Konsole zu Sicherheit > Authentifizierung > Vorlagen. Weitere Informationen finden Sie unter E-Mail-Vorlagen in der Firebase-Hilfe.
Sie können auch einen Status über eine Weiterleitungs-URL ü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 Authentifizierungsinstanz aktualisieren, bevor Sie die E-Mail senden. Beispiel:
await FirebaseAuth.instance.setLanguageCode("fr");
Sie können E-Mails zum Zurücksetzen des Passworts auch über die Firebase Konsole senden.
Nutzer löschen
Sie können ein Nutzerkonto mit der Methode delete() löschen. Beispiel:
await user?.delete();
Sie können Nutzer auch in der Firebase Konsole auf dem Tab Sicherheit > Authentifizierung > Nutzer löschen.
Nutzer neu authentifizieren
Für einige sicherheitsrelevante Aktionen, z. B.
das Löschen eines Kontos,
das Festlegen einer primären E-Mail-Adresseund
das Ändern eines Passworts, muss sich der Nutzer
kürzlich angemeldet haben. Wenn Sie eine dieser Aktionen ausführen und die Anmeldung des Nutzers zu lange her ist, schlägt die Aktion fehl und es wird eine FirebaseAuthException mit dem Code requires-recent-login ausgelöst.
In diesem Fall müssen Sie den Nutzer neu authentifizieren. Rufen Sie dazu neue Anmeldedaten vom Nutzer ab und übergeben Sie sie 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
Sie können Nutzerkonten aus einer Datei in Ihr Firebase-Projekt importieren. Verwenden Sie dazu den
Befehl auth:import der Firebase CLI. Beispiel:
firebase auth:import users.json --hash-algo=scrypt --rounds=8 --mem-cost=14