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:
- Apple-Plattformen: Schlüsselbunddienste .
- Android: Android-Schlüsselspeicher .
- Windows: Anmeldeinformationsverwaltungs-API .
- OS X: Schlüsselbunddienste .
- Linux: libsecret , das der Benutzer installiert haben muss.
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