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 Methode createUserWithEmailAndPassword() aufrufen oder einen Nutzer zum ersten Mal mit einem Verbundidentitätsanbieter wie Google Sign-In, Facebook Login oder Apple anmelden.

  • Firebase-Konsole: Erstellen Sie einen neuen Nutzer mit Passwortauthentifizierung auf dem Tab Sicherheit > Authentifizierung > Nutzer.

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 Neuaufbau ein neues Abo erstellt wird. Wenn Sie die Benutzeroberfläche als Reaktion auf den Authentifizierungsstatus aktualisieren müssen, verwenden Sie ein 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 grundlegenden 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 in der Firebase-Konsole auf dem Tab Sicherheit > Authentifizierung > Vorlagen anpassen, welche E‑Mail-Vorlage verwendet wird. Weitere Informationen finden Sie in der Firebase-Hilfe unter E-Mail-Vorlagen.

Es ist auch möglich, den Zustand über eine URL zur Weiterleitung 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 einem Nutzer eine E-Mail zum Zurücksetzen des Passworts senden. Beispiel:

await FirebaseAuth.instance
    .sendPasswordResetEmail(email: "user@example.com");

Sie können in der Firebase-Konsole auf dem Tab Sicherheit > Authentifizierung > Vorlagen anpassen, welche E‑Mail-Vorlage verwendet wird. 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ück zur App weiterzuleiten.

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

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