Nutzer in Firebase verwalten

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 sich ein Nutzer zum ersten Mal mit einem föderierten Identitätsanbieter, wie Google-Anmeldung, Facebook-Anmeldung oder Apple anmeldet.

  • 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, idTokenChanges und userChanges: Ihre Listener erhalten den aktuellen User oder null, 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 des Authentifizierungsstatus 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 Sie StreamBuilder:

    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: Das UserCredential-Objekt hat eine user-Eigenschaft mit dem aktuellen User:

    final userCredential =
        await FirebaseAuth.instance.signInWithCredential(credential);
    final user = userCredential.user;
    print(user?.uid);
    
  • Die currentUser-Eigenschaft der FirebaseAuth-Instanz: Wenn Sie sicher sind, dass der Nutzer derzeit angemeldet ist, können Sie über die currentUser -Eigenschaft auf User zugreifen:

    if (FirebaseAuth.instance.currentUser != null) {
      print(FirebaseAuth.instance.currentUser?.uid);
    }
    

    currentUser kann aus zwei Gründen null sein:

    • 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 behandeln.

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 auf dem Tab Vorlagen der Firebase Konsole anpassen, welche E-Mail-Vorlage verwendet wird. Weitere Informationen finden Sie im Hilfeartikel E-Mail-Vorlagen in Firebase-Hilfecenter.

Außerdem können Sie über eine Weiterleitungs-URL einen Status übergeben, um nach dem Senden einer Bestätigungs-E-Mail wieder zur App weiterzuleiten.

Darüber hinaus 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();

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 auf dem Tab Vorlagen der Firebase Konsole anpassen, welche E-Mail-Vorlage verwendet wird. Weitere Informationen finden Sie im Hilfeartikel E-Mail-Vorlagen in Firebase-Hilfecenter.

Außerdem können Sie über eine Weiterleitungs-URL einen Status übergeben, um nach dem Senden einer E-Mail zum Zurücksetzen des Passworts wieder zur App weiterzuleiten.

Darüber hinaus 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 E-Mails zum Zurücksetzen des Passworts auch über die Firebase Konsole senden.

Nutzer löschen

Mit der Methode delete() können Sie ein Nutzerkonto 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 vor Kurzem 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

Mit dem Befehl auth:import der Firebase CLI 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