Aby umożliwić użytkownikom uwierzytelnianie przy użyciu: Firebase Authentication, Firebase za pomocą ich adresów e-mail i haseł oraz do zarządzania kont opartych na haśle.
Zanim zaczniesz
- Dodaj Firebase do projektu C++.
- Jeśli Twoja aplikacja nie jest jeszcze połączona z projektem Firebase, możesz to zrobić na stronie konsolę Firebase.
- Włącz logowanie za pomocą adresu e-mail/hasła:
- W konsoli Firebase otwórz sekcję Uwierzytelnianie.
- Na karcie Metoda logowania włącz logowanie Adres e-mail/hasło. i kliknij Zapisz.
Uzyskaj dostęp do zajęć firebase::auth::Auth
Klasa Auth
jest bramą dla wszystkich wywołań interfejsu API.
- Dodaj pliki nagłówka Auth i App:
#include "firebase/app.h" #include "firebase/auth.h"
- 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__)
- Uzyskaj zajęcia
firebase::auth::Auth
związane z urządzeniemfirebase::App
. MiędzyApp
aAuth
występuje mapowanie 1:1.firebase::auth::Auth* auth = firebase::auth::Auth::GetAuth(app);
Tworzenie konta opartego na haśle
Aby utworzyć nowe konto użytkownika z hasłem, wykonaj następujące czynności w sekcji kod logowania do aplikacji:
- Gdy nowy użytkownik zarejestruje się za pomocą formularza rejestracji w aplikacji, wpisz wszystkie nowe weryfikacji konta wymaganych przez aplikację, takich jak sprawdzenie, czy nowe hasło do konta było poprawnie wpisane i jest zgodne z Twoją złożonością .
- Utwórz nowe konto, przekazując jego adres e-mail i hasło.
do
Auth::CreateUserWithEmailAndPassword
:firebase::Future<firebase::auth::AuthResult> result = auth->CreateUserWithEmailAndPassword(email, password);
- 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::CreateUserWithEmailAndPasswordLastResult
:firebase::Future<firebase::auth::AuthResult> result = auth->CreateUserWithEmailAndPasswordLastResult(); if (result.status() == firebase::kFutureStatusComplete) { if (result.error() == firebase::auth::kAuthErrorNone) { const firebase::auth::AuthResult auth_result = *result.result(); printf("Create user succeeded for email %s\n", auth_result.user.email().c_str()); } else { printf("Created user 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ść.
Logowanie użytkownika za pomocą adresu e-mail i hasła
Procedury logowania użytkownika za pomocą hasła są podobne do tych na stronie tworzenia nowego konta. W funkcji logowania w aplikacji wykonaj te czynności:
- Gdy użytkownik zaloguje się w Twojej aplikacji, przekaż mu jego adres e-mail oraz
hasło do
firebase::auth::Auth::SignInWithEmailAndPassword
:firebase::Future<firebase::auth::AuthResult> result = auth->SignInWithEmailAndPassword(email, password);
- 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::SignInWithEmailAndPasswordLastResult
:firebase::Future<firebase::auth::AuthResult> result = auth->SignInWithEmailAndPasswordLastResult(); if (result.status() == firebase::kFutureStatusComplete) { if (result.error() == firebase::auth::kAuthErrorNone) { const firebase::auth::AuthResult auth_result = *result.result(); printf("Sign in succeeded for email %s\n", auth_result.user.email().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ść.
Rejestrowanie oddzwonienia w przyszłości
Niektóre programy mają funkcjeUpdate
, które są wywoływane 30 lub 60 razy na sekundę.
Na przykład wiele gier korzysta z tego modelu. Te programy mogą wywoływać LastResult
do sondowania wywołań asynchronicznych.
Jeśli jednak Twój program jest oparty na zdarzeniach, możesz zarejestrować funkcje wywołań zwrotnych.
Funkcja wywołania zwrotnego jest wywoływana po zakończeniu okresu przyszłego.
void OnCreateCallback(const firebase::Future<firebase::auth::User*>& result, void* user_data) { // The callback is called when the Future enters the `complete` state. assert(result.status() == firebase::kFutureStatusComplete); // Use `user_data` to pass-in program context, if you like. MyProgramContext* program_context = static_cast<MyProgramContext*>(user_data); // Important to handle both success and failure situations. if (result.error() == firebase::auth::kAuthErrorNone) { firebase::auth::User* user = *result.result(); printf("Create user succeeded for email %s\n", user->email().c_str()); // Perform other actions on User, if you like. firebase::auth::User::UserProfile profile; profile.display_name = program_context->display_name; user->UpdateUserProfile(profile); } else { printf("Created user failed with error '%s'\n", result.error_message()); } } void CreateUser(firebase::auth::Auth* auth) { // Callbacks work the same for any firebase::Future. firebase::Future<firebase::auth::AuthResult> result = auth->CreateUserWithEmailAndPasswordLastResult(); // `&my_program_context` is passed verbatim to OnCreateCallback(). result.OnCompletion(OnCreateCallback, &my_program_context); }Jeśli wolisz, funkcja wywołania zwrotnego może też być lambda.
void CreateUserUsingLambda(firebase::auth::Auth* auth) { // Callbacks work the same for any firebase::Future. firebase::Future<firebase::auth::AuthResult> result = auth->CreateUserWithEmailAndPasswordLastResult(); // The lambda has the same signature as the callback function. result.OnCompletion( [](const firebase::Future<firebase::auth::User*>& result, void* user_data) { // `user_data` is the same as &my_program_context, below. // Note that we can't capture this value in the [] because std::function // is not supported by our minimum compiler spec (which is pre C++11). MyProgramContext* program_context = static_cast<MyProgramContext*>(user_data); // Process create user result... (void)program_context; }, &my_program_context); }
Zalecane: włącz ochronę wyliczania e-maili
Niektóre metody Firebase Authentication, które przyjmują adresy e-mail jako parametry, określone błędy, jeśli adres e-mail nie został zarejestrowany, a należało go zarejestrować; (np. podczas logowania za pomocą adresu e-mail i hasła) lub gdy musi być nieużywany (na przykład podczas zmiany adresu e-mail użytkownika). Może to być pomocne podczas sugerowania użytkownikom konkretnych rozwiązań, ale może też niepowołane osoby wykorzystywane do wykrywania adresów e-mail zarejestrowanych przez użytkowników.
Aby ograniczyć to ryzyko, zalecamy włączenie ochrony przed wyliczeniem adresów e-mail.
swojego projektu za pomocą narzędzia gcloud
Google Cloud. Pamiętaj, że włączenie tej opcji
zmienia działanie funkcji raportowania błędów w Firebase Authentication: upewnij się, że aplikacja
nie polega na bardziej szczegółowych błędach.
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();