Check out what’s new from Firebase at Google I/O 2022. Learn more

Benutzer in Firebase verwalten

Erstellen Sie einen Benutzer

Sie erstellen einen neuen Benutzer in Ihrem Firebase-Projekt, indem Sie die CreateUserWithEmailAndPassword Methode aufrufen oder einen Benutzer zum ersten Mal mit einem föderierten Identitätsanbieter wie Google Sign-In oder Facebook Login anmelden .

Sie können auch neue passwortauthentifizierte Benutzer im Abschnitt "Authentifizierung" der Firebase-Konsole auf der Seite "Benutzer" erstellen.

Holen Sie sich den aktuell angemeldeten Benutzer

Die empfohlene Methode zum Abrufen des aktuellen Benutzers besteht darin, einen Listener für das Auth-Objekt festzulegen:

class MyAuthStateListener : public firebase::auth::AuthStateListener {
 public:
  void OnAuthStateChanged(firebase::auth::Auth* auth) override {
    firebase::auth::User* user = auth->current_user();
    if (user != nullptr) {
      // User is signed in
      printf("OnAuthStateChanged: signed_in %s\n", user->uid().c_str());
    } else {
      // User is signed out
      printf("OnAuthStateChanged: signed_out\n");
    }
    // ...
  }
};
// ... initialization code
// Test notification on registration.
MyAuthStateListener state_change_listener;
auth->AddAuthStateListener(&state_change_listener);

Durch die Verwendung eines Listeners stellen Sie sicher, dass sich das Auth-Objekt nicht in einem Zwischenzustand befindet – wie z. B. bei der Initialisierung –, wenn Sie den aktuellen Benutzer abrufen.

Sie können den aktuell angemeldeten Benutzer auch abrufen, indem Sie current_user aufrufen. Wenn ein Benutzer nicht angemeldet ist, gibt current_user nullptr zurück.

Behalten Sie die Anmeldeinformationen eines Benutzers bei

Die Anmeldeinformationen des Benutzers werden im lokalen Schlüsselspeicher gespeichert, nachdem sich ein Benutzer angemeldet hat. Der lokale Cache der Benutzeranmeldeinformationen kann gelöscht werden, indem der Benutzer abgemeldet wird. Der Schlüsselspeicher ist plattformspezifisch:

Holen Sie sich das Profil eines Benutzers

Um die Profilinformationen eines Benutzers abzurufen, verwenden Sie die Zugriffsmethoden einer Instanz von firebase::auth::User . Beispielsweise:

firebase::auth::User* user = auth->current_user();
if (user != nullptr) {
  std::string name = user->display_name();
  std::string email = user->email();
  std::string photo_url = user->photo_url();
  // The user's ID, unique to the Firebase project.
  // Do NOT use this value to authenticate with your backend server,
  // if you have one. Use firebase::auth::User::Token() instead.
  std::string uid = user->uid();
}

Rufen Sie die anbieterspezifischen Profilinformationen eines Benutzers ab

Um die Profilinformationen abzurufen, die von den mit einem Benutzer verknüpften Anmeldeanbietern abgerufen werden, verwenden Sie die ProviderData -Methode. Beispielsweise:

firebase::auth::User* user = auth->current_user();
if (user != nullptr) {
  for (auto it = user->provider_data().begin();
       it != user->provider_data().end(); ++it) {
    firebase::auth::UserInfoInterface* profile = *it;
    // Id of the provider (ex: google.com)
    std::string providerId = profile->provider_id();

    // UID specific to the provider
    std::string uid = profile->uid();

    // Name, email address, and profile photo Url
    std::string name = profile->display_name();
    std::string email = profile->email();
    std::string photoUrl = profile->photo_url();
  }
}

Aktualisieren Sie das Profil eines Benutzers

Sie können die grundlegenden Profilinformationen eines Benutzers – den Anzeigenamen und die Profilbild-URL des Benutzers – mit der UpdateUserProfile -Methode aktualisieren. Beispielsweise:

firebase::auth::User* user = auth->current_user();
if (user != nullptr) {
  firebase::auth::User::UserProfile profile;
  profile.display_name = "Jane Q. User";
  profile.photo_url = "https://example.com/jane-q-user/profile.jpg";
  user->UpdateUserProfile(profile).OnCompletion(
      [](const firebase::Future<void>& completed_future, void* user_data) {
        // We are probably in a different thread right now.
        if (completed_future.error() == 0) {
          printf("User profile updated.");
        }
      },
      nullptr);  // pass user_data here.
}

Legen Sie die E-Mail-Adresse eines Benutzers fest

Sie können die E-Mail-Adresse eines Benutzers mit der UpdateEmail Methode festlegen. Beispielsweise:

firebase::auth::User* user = auth->current_user();
if (user != nullptr) {
  user->UpdateEmail("user@example.com")
      .OnCompletion(
          [](const firebase::Future<void>& completed_future,
             void* user_data) {
            // We are probably in a different thread right now.
            if (completed_future.error() == 0) {
              printf("User email address updated.");
            }
          },
          nullptr);
}

Senden Sie einem Benutzer eine Bestätigungs-E-Mail

Mit der SendEmailVerification Methode können Sie eine Adressbestätigungs-E-Mail an einen Benutzer senden. Beispielsweise:

firebase::auth::User* user = auth->current_user();
if (user != nullptr) {
  user->SendEmailVerification().OnCompletion(
      [](const firebase::Future<void>& completed_future, void* user_data) {
        // We are probably in a different thread right now.
        if (completed_future.error() == 0) {
          printf("Email sent.");
        }
      },
      nullptr);
}

Sie können die E-Mail-Vorlage, die im Abschnitt „Authentifizierung“ der Firebase-Konsole verwendet wird, auf der Seite „E-Mail-Vorlagen“ anpassen. Siehe E-Mail-Vorlagen in der Firebase-Hilfe.

Legen Sie das Kennwort eines Benutzers fest

Sie können das Kennwort eines Benutzers mit der UpdatePassword Methode festlegen. Beispielsweise:

firebase::auth::User* user = auth->current_user();
std::string newPassword = "SOME-SECURE-PASSWORD";

if (user != nullptr) {
  user->UpdatePassword(newPassword.c_str())
      .OnCompletion(
          [](const firebase::Future<void>& completed_future,
             void* user_data) {
            // We are probably in a different thread right now.
            if (completed_future.error() == 0) {
              printf("password updated.");
            }
          },
          nullptr);
}

Senden Sie eine E-Mail zum Zurücksetzen des Passworts

Mit der SendPasswordResetEmail Methode können Sie eine E-Mail zum Zurücksetzen des Kennworts an einen Benutzer senden. Beispielsweise:

std::string emailAddress = "user@example.com";

auth->SendPasswordResetEmail(emailAddress.c_str())
    .OnCompletion(
        [](const firebase::Future<void>& completed_future,
           void* user_data) {
          // We are probably in a different thread right now.
          if (completed_future.error() == 0) {
            // Email sent.
          } else {
            // An error happened.
            printf("Error %d: %s", completed_future.error(),
                   completed_future.error_message());
          }
        },
        nullptr);

Sie können die E-Mail-Vorlage, die im Abschnitt „Authentifizierung“ der Firebase-Konsole verwendet wird, auf der Seite „E-Mail-Vorlagen“ anpassen. Siehe E-Mail-Vorlagen in der Firebase-Hilfe.

Sie können E-Mails zum Zurücksetzen des Passworts auch über die Firebase-Konsole senden.

Einen Benutzer löschen

Sie können ein Benutzerkonto mit der Delete Methode löschen. Beispielsweise:

firebase::auth::User* user = auth->current_user();
if (user != nullptr) {
  user->Delete().OnCompletion(
      [](const firebase::Future<void>& completed_future, void* user_data) {
        if (completed_future.error() == 0) {
          // User deleted.
        } else {
          // An error happened.
          printf("Error %d: %s", completed_future.error(),
                 completed_future.error_message());
        }
      },
      nullptr);
}

Sie können Benutzer auch im Abschnitt „Authentifizierung“ der Firebase-Konsole auf der Seite „Benutzer“ löschen.

Authentifizieren Sie einen Benutzer erneut

Einige sicherheitsrelevante Aktionen – wie das Löschen eines Kontos , das Festlegen einer primären E-Mail-Adresse und das Ändern eines Passworts – erfordern, dass sich der Benutzer kürzlich angemeldet hat. Wenn Sie eine dieser Aktionen ausführen und der Benutzer sich vor zu langer Zeit angemeldet hat, wird die Aktion schlägt fehl.

Authentifizieren Sie in diesem Fall den Benutzer erneut, indem Sie neue Anmeldeinformationen vom Benutzer abrufen und die Anmeldeinformationen an Reauthenticate . Beispielsweise:

firebase::auth::User* user = auth->current_user();

// Get auth credentials from the user for re-authentication. The example
// below shows email and password credentials but there are multiple
// possible providers, such as GoogleAuthProvider or FacebookAuthProvider.
firebase::auth::Credential credential =
    firebase::auth::EmailAuthProvider::GetCredential("user@example.com",
                                                     "password1234");

if (user != nullptr) {
  user->Reauthenticate(credential)
      .OnCompletion(
          [](const firebase::Future<void>& completed_future,
             void* user_data) {
            if (completed_future.error() == 0) {
              printf("User re-authenticated.");
            }
          },
          nullptr);
}

Benutzerkonten importieren

Sie können Benutzerkonten aus einer Datei in Ihr Firebase-Projekt importieren, indem Sie den Befehl auth:import der Firebase-Befehlszeilenschnittstelle verwenden. Beispielsweise:

firebase auth:import users.json --hash-algo=scrypt --rounds=8 --mem-cost=14