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 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, 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 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 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