Mit Firebase über ein benutzerdefiniertes Authentifizierungssystem und C++ authentifizieren

Du kannst Firebase Authentication in ein benutzerdefiniertes Authentifizierungssystem einbinden, indem du deinen Authentifizierungsserver so modifizierst, dass benutzerdefinierte signierte Tokens generiert werden, wenn sich ein Nutzer erfolgreich anmeldet. Deine App empfängt dieses Token und verwendet es zur Authentifizierung mit Firebase.

Hinweis

  1. Fügen Sie Firebase zu Ihrem Projekt.
  2. Rufen Sie die Serverschlüssel Ihres Projekts ab:
    1. Rufen Sie in den Einstellungen Ihres Projekts die Seite Dienstkonten auf.
    2. Klicken Sie auf Neuen privaten Schlüssel erstellen unten im Abschnitt Firebase Admin SDK auf der Seite Dienstkonten.
    3. Das öffentliche/private Schlüsselpaar des neuen Dienstkontos wird automatisch die auf Ihrem Computer gespeichert sind. Kopieren Sie diese Datei auf Ihren Authentifizierungsserver.

Mit Firebase authentifizieren

Die Klasse Auth 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 einen Klasse firebase::App.
    #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 Ihr Gerät „firebase::App“. Es gibt eine Eins-zu-Eins-Zuordnung zwischen App und Auth.
    firebase::auth::Auth* auth = firebase::auth::Auth::GetAuth(app);
Auth::SignInWithCustomToken mit dem Token von Ihrem Authentifizierungsserver aufrufen.
  1. Wenn sich Nutzer in Ihrer App anmelden, senden Sie ihnen ihre Anmeldedaten (für (z. B. Nutzername und Passwort) an Ihren Authentifizierungsserver. Ihr Server prüft die Anmeldedaten und gibt eine benutzerdefiniertes Token wenn sie gültig sind.
  2. Nachdem Sie das benutzerdefinierte Token von Ihrem Authentifizierungsserver erhalten haben, geben Sie es an Auth::SignInWithCustomToken weiter, um den Nutzer anzumelden:
    firebase::Future<firebase::auth::AuthResult> result =
        auth->SignInWithCustomToken(custom_token);
  3. Wenn Ihr Programm über eine regelmäßig ausgeführte Aktualisierungsschleife verfügt (z. B. bei 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());
      }
    }
    Wenn Ihr Programm ereignisgesteuert ist, einen Callback auf der Future

Nächste Schritte

Nachdem sich ein Nutzer zum ersten Mal angemeldet hat, wird ein neues Nutzerkonto erstellt und die mit den Anmeldedaten verknüpft sind, d. h. Nutzername und Passwort, oder Authentifizierungsanbieter-Informationen – also für den Nutzer, mit dem sich der Nutzer angemeldet hat. Diese neue -Konto wird als Teil Ihres Firebase-Projekts gespeichert und kann verwendet werden, um in jeder App in Ihrem Projekt einen Nutzer erreichen, unabhängig davon, wie er sich anmeldet.

  • Die grundlegenden Profilinformationen der Nutzer finden Sie in Ihren Apps über die firebase::auth::User-Objekt:

    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 Realtime Database- und Cloud Storage-Sicherheitsregeln können Sie die eindeutige Nutzer-ID des angemeldeten Nutzers aus der Variablen auth abrufen und damit steuern, auf welche Daten ein Nutzer zugreifen kann.

Sie können Nutzern erlauben, sich über mehrere Authentifizierungsanbieter in Ihrer App anzumelden, indem Sie Anmeldedaten des Authentifizierungsanbieters mit einem vorhandenen Nutzerkonto verknüpfen.

Rufen Sie auf, um einen Nutzer abzumelden. SignOut():

auth->SignOut();