Catch up on everthing we announced at this year's Firebase Summit. Learn more

Authentifizieren Sie sich bei Firebase mit einem benutzerdefinierten Authentifizierungssystem und C++

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

Bevor Sie beginnen

  1. In Firebase zu Ihrem C ++ Projekt .
  2. Rufen Sie die Serverschlüssel Ihres Projekts ab:
    1. Gehen Sie auf die Dienstkonto Seite in Ihrer Projekteinstellung.
    2. Klicken Sie auf Erstellen eines neuen privaten Schlüssel auf der Unterseite des Firebase Admin SDK Abschnitt der Seite Dienstkonten.
    3. Das öffentliche/private Schlüsselpaar des neuen Dienstkontos wird automatisch auf Ihrem Computer gespeichert. Kopieren Sie diese Datei auf Ihren Authentifizierungsserver.

Mit Firebase authentifizieren

Die Auth - Klasse ist das Gateway für alle API - Aufrufe.
  1. Fügen Sie die Auth und App - Header - Dateien:
    #include "firebase/app.h"
    #include "firebase/auth.h"
    
  2. In Ihrem Initialisierungscode, erstellen Sie 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 firebase::auth::Auth - Klasse für Ihre firebase::App . Es gibt eine Eins-zu-Eins - Abbildung zwischen App und Auth .
    firebase::auth::Auth* auth = firebase::auth::Auth::GetAuth(app);
    
Call Auth::SignInWithCustomToken mit dem Token von Ihrem Authentifizierungsserver.
  1. Wenn sich Benutzer bei Ihrer App anmelden, senden Sie ihre Anmeldeinformationen (z. B. ihren Benutzernamen und ihr Kennwort) an Ihren Authentifizierungsserver. Der Server überprüft die Anmeldeinformationen und gibt einen benutzerdefinierten Token , wenn sie gültig sind.
  2. Nachdem Sie die benutzerdefinierten Token von Ihrem Authentifizierungsserver erhalten, übergibt es an Auth::SignInWithCustomToken im Benutzer anmelden:
    firebase::Future<firebase::auth::User*> result =
        auth->SignInWithCustomToken(custom_token);
    
  3. Wenn Ihr Programm ein Update - Schleife hat , dass läuft regelmäßig (etwa bei 30 oder 60 mal pro Sekunde), können Sie die Ergebnisse überprüfen einmal pro Update mit Auth::SignInWithCustomTokenLastResult :
    firebase::Future<firebase::auth::User*> result =
        auth->SignInWithCustomTokenLastResult();
    if (result.status() == firebase::kFutureStatusComplete) {
      if (result.error() == firebase::auth::kAuthErrorNone) {
        firebase::auth::User* user = *result.result();
        printf("Sign in succeeded for `%s`\n", user->display_name().c_str());
      } else {
        printf("Sign in failed with error '%s'\n", result.error_message());
      }
    }
    
    Oder, wenn Ihr Programm ereignisgesteuert, können Sie es vorziehen um einen Rückruf über die Zukunft zu registrieren .

Nächste Schritte

Nachdem sich ein Benutzer zum ersten Mal anmeldet, wird ein neues Benutzerkonto erstellt und mit den Anmeldeinformationen – d. h. Benutzername und Kennwort, Telefonnummer oder Authentifizierungsanbieterinformationen – verknüpft, 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 Anwendungen können Sie die Benutzerprofilgrundinformationen aus dem erhaltenen firebase::auth::User

    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();
    }
    
  • In Ihrer Datenbank und Firebase Realtime Cloud Storage Sicherheitsregeln , können Sie die angemeldeten Nutzer die eindeutige Benutzer - ID aus der bekommen auth Variable, und es verwenden , um steuern kann ein Benutzer Zugriff , welche Daten.

Sie können Benutzer erlauben , durch mehrere Authentifizierungsanbieter anmelden, um Ihre App Verknüpfung Auth - Provider - Anmeldeinformationen zu einem vorhandenen Benutzerkonto.

Um einen Benutzer abzumelden, rufen SignOut() :

auth->SignOut();