Bevor Sie beginnen
- Fügen Sie Ihrem C++-Projekt Firebase hinzu .
- Holen Sie sich die Serverschlüssel Ihres Projekts:
- Rufen Sie in den Einstellungen Ihres Projekts die Seite „ Dienstkonten “ auf.
- Klicken Sie unten im Abschnitt „ Firebase Admin SDK “ auf der Seite „ Dienstkonten “ auf „ Neuen privaten Schlüssel generieren “.
- Das öffentliche/private Schlüsselpaar des neuen Dienstkontos wird automatisch auf Ihrem Computer gespeichert. Kopieren Sie diese Datei auf Ihren Authentifizierungsserver.
Authentifizieren Sie sich mit Firebase
DieAuth
-Klasse ist das Gateway für alle API-Aufrufe.- Fügen Sie die Auth- und App-Header-Dateien hinzu:
#include "firebase/app.h" #include "firebase/auth.h"
- Erstellen Sie in Ihrem Initialisierungscode eine
firebase::App
-Klasse.#if defined(__ANDROID__) firebase::App* app = firebase::App::Create(firebase::AppOptions(), my_jni_env, my_activity); #else firebase::App* app = firebase::App::Create(firebase::AppOptions()); #endif // defined(__ANDROID__)
- Erwerben Sie die Klasse
firebase::auth::Auth
für Ihrefirebase::App
. Es gibt eine Eins-zu-Eins-Zuordnung zwischenApp
undAuth
.firebase::auth::Auth* auth = firebase::auth::Auth::GetAuth(app);
Auth::SignInWithCustomToken
mit dem Token von Ihrem Authentifizierungsserver auf.- Wenn sich Benutzer bei Ihrer App anmelden, senden Sie ihre Anmeldeinformationen (z. B. ihren Benutzernamen und ihr Kennwort) an Ihren Authentifizierungsserver. Ihr Server überprüft die Anmeldeinformationen und gibt ein benutzerdefiniertes Token zurück, wenn sie gültig sind.
- Nachdem Sie das benutzerdefinierte Token von Ihrem Authentifizierungsserver erhalten haben, übergeben Sie es an
Auth::SignInWithCustomToken
, um den Benutzer anzumelden:firebase::Future<firebase::auth::AuthResult> result = auth->SignInWithCustomToken(custom_token);
- Wenn Ihr Programm über eine Aktualisierungsschleife verfügt, die regelmäßig ausgeführt wird (z. B. 30 oder 60 Mal pro Sekunde), können Sie die Ergebnisse einmal pro Aktualisierung mit
Auth::SignInWithCustomTokenLastResult
:firebase::Future<firebase::auth::AuthResult> result = auth->SignInWithCustomTokenLastResult(); if (result.status() == firebase::kFutureStatusComplete) { if (result.error() == firebase::auth::kAuthErrorNone) { firebase::auth::AuthResult auth_result = *result.result(); printf("Sign in succeeded for `%s`\n", auth_result.user.display_name().c_str()); } else { printf("Sign in failed with error '%s'\n", result.error_message()); } }
überprüfen. Wenn Ihr Programm ereignisgesteuert ist, können Sie dies vorziehen um einen Rückruf auf der Future zu registrieren .
Nächste Schritte
Nachdem sich ein Benutzer zum ersten Mal angemeldet hat, wird ein neues Benutzerkonto erstellt und mit den Anmeldeinformationen verknüpft – d. h. dem Benutzernamen und Kennwort, der Telefonnummer oder den Authentifizierungsanbieterinformationen –, mit denen sich der Benutzer angemeldet hat. Dieses neue Konto wird als Teil Ihres Firebase-Projekts gespeichert und kann verwendet werden, um einen Benutzer in jeder App in Ihrem Projekt zu identifizieren, unabhängig davon, wie sich der Benutzer anmeldet.
In Ihren Apps können Sie die grundlegenden Profilinformationen des Benutzers aus dem Objekt
firebase::auth::User
abrufen: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(); }
In Ihren Sicherheitsregeln für die Firebase-Echtzeitdatenbank und den Cloud-Speicher können Sie die eindeutige Benutzer-ID des angemeldeten Benutzers aus der Variablen
auth
und damit steuern, auf welche Daten ein Benutzer zugreifen kann.
Sie können Benutzern erlauben, sich mit mehreren Authentifizierungsanbietern bei Ihrer App anzumelden, indem Sie die Anmeldeinformationen des Authentifizierungsanbieters mit einem vorhandenen Benutzerkonto verknüpfen.
Um einen Benutzer abzumelden, rufen SignOut()
:
auth->SignOut();