Authentifizieren Sie sich mit Firebase mithilfe eines benutzerdefinierten Authentifizierungssystems und C++

Sie können die Firebase-Authentifizierung in ein benutzerdefiniertes Authentifizierungssystem integrieren, indem Sie Ihren Authentifizierungsserver so ändern, dass er benutzerdefinierte signierte Token erstellt, wenn sich ein Benutzer erfolgreich anmeldet. Ihre App empfängt dieses Token und verwendet es zur Authentifizierung bei Firebase.

Bevor Sie beginnen

  1. Fügen Sie Firebase zu Ihrem C++-Projekt hinzu .
  2. Holen Sie sich die Serverschlüssel Ihres Projekts:
    1. Gehen Sie in den Einstellungen Ihres Projekts zur Seite „Dienstkonten“ .
    2. Klicken Sie unten im Abschnitt „Firebase Admin SDK“ der Seite „Dienstkonten“ auf „Neuen privaten Schlüssel generieren“ .
    3. 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

Die Auth Klasse ist das Gateway für alle API-Aufrufe.
  1. Fügen Sie die Auth- und App-Headerdateien hinzu:
    #include "firebase/app.h"
    #include "firebase/auth.h"
    
  2. 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__)
    
  3. Erwerben Sie die Klasse firebase::auth::Auth für Ihre firebase::App . Es gibt eine Eins-zu-Eins-Zuordnung zwischen App und Auth .
    firebase::auth::Auth* auth = firebase::auth::Auth::GetAuth(app);
    
Rufen Sie Auth::SignInWithCustomToken mit dem Token von Ihrem Authentifizierungsserver auf.
  1. Wenn sich Benutzer bei Ihrer App anmelden, senden Sie ihre Anmeldeinformationen (z. B. ihren Benutzernamen und ihr Passwort) an Ihren Authentifizierungsserver. Ihr Server prüft die Anmeldeinformationen und gibt ein benutzerdefiniertes Token zurück, wenn diese gültig sind.
  2. 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);
    
  3. 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 möglicherweise auch bevorzugen um einen Rückruf für die Zukunft zu registrieren .

Nächste Schritte

Nachdem sich ein Benutzer zum ersten Mal angemeldet hat, wird ein neues Benutzerkonto erstellt und mit den Anmeldeinformationen – also dem Benutzernamen und dem Kennwort, der Telefonnummer oder den Informationen zum Authentifizierungsanbieter – verknüpft, mit denen sich der Benutzer angemeldet hat. Dieses neue Konto wird als Teil Ihres Firebase-Projekts gespeichert und kann zur Identifizierung eines Benutzers in jeder App in Ihrem Projekt verwendet werden, unabhängig davon, wie sich der Benutzer anmeldet.

  • In Ihren Apps können Sie die grundlegenden Profilinformationen des Benutzers aus dem firebase::auth::User Objekt 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 Firebase-Echtzeitdatenbank- und Cloud-Speicher- Sicherheitsregeln können Sie die eindeutige Benutzer-ID des angemeldeten Benutzers aus der auth abrufen und damit steuern, auf welche Daten ein Benutzer zugreifen kann.

Sie können Benutzern die Anmeldung bei Ihrer App mit mehreren Authentifizierungsanbietern ermöglichen, indem Sie die Anmeldeinformationen des Authentifizierungsanbieters mit einem vorhandenen Benutzerkonto verknüpfen.

Um einen Benutzer abzumelden, rufen Sie SignOut() auf:

auth->SignOut();