Nutzer in Firebase verwalten

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 und userChanges: Ihre Zuhörer 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 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 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 sichergestellt, dass der Widget-Baum automatisch neu erstellt wird, wenn sich der Authentifizierungsstatus des Nutzers ändert.

  • Das von den Authentifizierungsmethoden (signIn-) zurückgegebene UserCredential-Objekt: 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);
    
  • Das Attribut currentUser der FirebaseAuth-Instanz: Wenn Sie sicher sind, dass der Nutzer derzeit angemeldet ist, können Sie über das Attribut currentUser auf User zugreifen:

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

    Die currentUser kann aus zwei Gründen null 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