Uwierzytelniaj za pomocą Firebase z użyciem niestandardowego systemu uwierzytelniania i języka C++

Możesz zintegrować Firebase Authentication z własnym systemem uwierzytelniania przez modyfikowanie serwera uwierzytelniania w celu tworzenia niestandardowych podpisanych tokenów, udało się zalogować. Twoja aplikacja otrzymuje ten token i używa go do uwierzytelniania za pomocą Firebase.

Zanim zaczniesz

  1. Dodaj Firebase do swojego C++ projekt.
  2. Pobierz klucze serwera projektu:
    1. Otwórz Konta usługi. w ustawieniach projektu.
    2. Kliknij Wygeneruj nowy klucz prywatny na dole Sekcja Firebase Admin SDK na stronie Konta usługi.
    3. Para kluczy publiczny/prywatny nowego konta usługi jest automatycznie zapisane na komputerze. Skopiuj ten plik na serwer uwierzytelniania.

Uwierzytelnij za pomocą Firebase

Klasa Auth jest bramą dla wszystkich wywołań interfejsu API.
  1. Dodaj pliki nagłówka Auth i App:
    #include "firebase/app.h"
    #include "firebase/auth.h"
    
  2. W kodzie inicjowania utwórz 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. Uzyskaj zajęcia firebase::auth::Auth związane z urządzeniem firebase::App. Między App a Auth występuje mapowanie 1:1.
    firebase::auth::Auth* auth = firebase::auth::Auth::GetAuth(app);
    
. Wywołaj funkcję Auth::SignInWithCustomToken przy użyciu tokena z serwera uwierzytelniania.
  1. Gdy użytkownicy logują się w Twojej aplikacji, wyślij swoje dane logowania (na przykład (np. nazwę użytkownika i hasło) na Twój serwer uwierzytelniania. Twoje serwer sprawdza dane logowania i zwraca token niestandardowy czy są prawidłowe.
  2. Po otrzymaniu niestandardowego tokena z serwera uwierzytelniania przekaż do Auth::SignInWithCustomToken w celu zalogowania użytkownika:
    firebase::Future<firebase::auth::AuthResult> result =
        auth->SignInWithCustomToken(custom_token);
    
  3. Jeśli Twój program ma pętlę aktualizacji, która działa regularnie (np. przy 30 lub 60 sekundzie) razy na sekundę), możesz sprawdzić wyniki raz na każdą aktualizację, 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());
      }
    }
    
    A jeśli Twój program jest oparty na zdarzeniach, możesz preferować zarejestruj się na oddzwonienie Przyszłość.

Dalsze kroki

Gdy użytkownik zaloguje się po raz pierwszy, tworzone jest nowe konto użytkownika. powiązane z danymi logowania, czyli z nazwą użytkownika, hasłem i numerem telefonu, numer telefonu lub informacje o dostawcy uwierzytelniania – użytkownik zalogowany. Ten nowy jest przechowywane w ramach projektu Firebase i może służyć do identyfikowania użytkownika w każdej aplikacji w projekcie, niezależnie od tego, jak się loguje.

  • W swoich aplikacjach możesz uzyskać podstawowe informacje o profilu użytkownika z Obiekt firebase::auth::User:

    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();
    }
    
  • Na liście Firebase Realtime Database i Cloud Storage regułami zabezpieczeń, pobierz ze zmiennej auth unikalny identyfikator zalogowanego użytkownika, i używać ich do kontrolowania, do jakich danych użytkownik ma dostęp.

Możesz zezwolić użytkownikom na logowanie się w aplikacji przy użyciu wielokrotnego uwierzytelniania. dostawców, łącząc dane logowania dostawcy uwierzytelniania z istniejącego konta użytkownika.

Aby wylogować użytkownika, wywołaj SignOut():

auth->SignOut();