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