Verwalten Sie Benutzer in Firebase

Erstellen Sie einen Benutzer

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

Sie können auch neue passwortauthentifizierte Benutzer über den Abschnitt „Authentifizierung“ der Firebase-Konsole auf der Seite „Benutzer“ erstellen.

Rufen Sie den aktuell angemeldeten Benutzer ab

Der empfohlene Weg, den aktuellen Benutzer abzurufen, 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.is_valid()) {
      // 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 (z. B. Initialisierung), wenn Sie den aktuellen Benutzer erhalten.

Sie können den aktuell angemeldeten Benutzer auch abrufen, indem Sie current_user aufrufen. Wenn ein Benutzer nicht angemeldet ist, gibt die is_valid Methode des Benutzers „false“ zurück.

Behalten Sie die Anmeldeinformationen eines Benutzers bei

Die Anmeldeinformationen des Benutzers werden im lokalen Schlüsselspeicher gespeichert, nachdem ein Benutzer angemeldet ist. Der lokale Cache der Benutzeranmeldeinformationen kann durch Abmelden des Benutzers gelöscht werden. Der Keystore ist plattformspezifisch:

Rufen Sie das Profil eines Benutzers ab

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

firebase::auth::User user = auth->current_user();
if (user.is_valid()) {
  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. Zum Beispiel:

firebase::auth::User user = auth->current_user();
if (user.is_valid()) {
  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 Profilfoto-URL des Benutzers – mit der UpdateUserProfile Methode aktualisieren. Zum Beispiel:

firebase::auth::User user = auth->current_user();
if (user.is_valid()) {
  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. Zum Beispiel:

firebase::auth::User user = auth->current_user();
if (user.is_valid()) {
  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 E-Mail zur Adressbestätigung an einen Benutzer senden. Zum Beispiel:

firebase::auth::User user = auth->current_user();
if (user.is_valid()) {
  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 im Firebase-Hilfecenter.

Legen Sie das Passwort eines Benutzers fest

Sie können das Passwort eines Benutzers mit der UpdatePassword Methode festlegen. Zum Beispiel:

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

if (user.is_valid()) {
  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 Methode SendPasswordResetEmail können Sie eine E-Mail zum Zurücksetzen des Passworts an einen Benutzer senden. Zum Beispiel:

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 im Firebase-Hilfecenter.

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 Methode Delete löschen. Zum Beispiel:

firebase::auth::User user = auth->current_user();
if (user.is_valid()) {
  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.

Wenn dies geschieht, authentifizieren Sie den Benutzer erneut, indem Sie neue Anmeldeinformationen vom Benutzer erhalten und diese an Reauthenticate übergeben. Zum Beispiel:

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.is_valid()) {
  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-CLI verwenden. Zum Beispiel:

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