Możesz umożliwić użytkownikom uwierzytelnianie w Firebase za pomocą dostawców OAuth, takich jak Yahoo, przez zintegrowanie w aplikacji ogólnego logowania OAuth opartego na internecie za pomocą pakietu SDK Firebase, aby przeprowadzić pełny proces logowania. Ten proces wymaga użycia pakietów SDK Firebase na telefony, dlatego jest obsługiwany tylko na platformach Android i Apple.
Zanim zaczniesz
- Dodaj Firebase do projektu C++.
- W konsoli Firebase otwórz Bezpieczeństwo > Uwierzytelnianie.
- Na karcie Metoda logowania włącz dostawcę logowania Yahoo.
-
Dodaj identyfikator klienta i tajny klucz klienta z konsoli deweloperskiej tego dostawcy do konfiguracji dostawcy:
-
Aby zarejestrować klienta OAuth Yahoo, postępuj zgodnie z dokumentacją dla deweloperów Yahoo dotyczącą rejestrowania aplikacji internetowej w Yahoo.
Wybierz 2 uprawnienia interfejsu OpenID Connect API:
profileiemail. -
Podczas rejestrowania aplikacji u tych dostawców pamiętaj, aby zarejestrować
*.firebaseapp.comdomenę projektu jako domenę przekierowania aplikacji.
-
- Kliknij Zapisz.
Otwórz zajęcia firebase::auth::Auth.
Klasa Auth jest bramą dla wszystkich wywołań interfejsu API.
- Dodaj pliki nagłówkowe Auth i App:
#include "firebase/app.h" #include "firebase/auth.h"
- W kodzie inicjowania utwórz klasę
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 dostęp do zajęć
firebase::auth::Authdlafirebase::App. Istnieje mapowanie 1:1 międzyAppaAuth.firebase::auth::Auth* auth = firebase::auth::Auth::GetAuth(app);
Obsługa procesu logowania za pomocą pakietu Firebase SDK
Aby obsłużyć proces logowania za pomocą pakietu Firebase SDK, wykonaj te czynności:
Utwórz instancję klasy
FederatedOAuthProviderDataskonfigurowaną z identyfikatorem dostawcy odpowiednim dla Yahoo.firebase::auth::FederatedOAuthProviderData provider_data(firebase::auth::YahooAuthProvider::kProviderId);Opcjonalnie: określ dodatkowe parametry niestandardowe protokołu OAuth, które chcesz wysłać wraz z żądaniem OAuth.
// Prompt user to re-authenticate to Yahoo. provider_data.custom_parameters["prompt"] = "login"; // Localize to French. provider_data.custom_parameters["language"] = "fr";Listę parametrów obsługiwanych przez Yahoo znajdziesz w dokumentacji OAuth Yahoo. Pamiętaj, że nie możesz przekazywać parametrów wymaganych przez Firebase za pomocą znaku
custom_parameters(). Są to parametry client_id, redirect_uri, response_type, scope i state.Opcjonalnie: określ dodatkowe zakresy OAuth 2.0 poza
profileiemail, o które chcesz poprosić dostawcę uwierzytelniania. Jeśli Twoja aplikacja wymaga dostępu do prywatnych danych użytkownika z interfejsów API Yahoo, musisz poprosić o uprawnienia do interfejsów API Yahoo w sekcji Uprawnienia interfejsu API w konsoli dewelopera Yahoo. Żądane zakresy OAuth muszą dokładnie odpowiadać wstępnie skonfigurowanym zakresom w uprawnieniach interfejsu API aplikacji. Jeśli na przykład w przypadku kontaktów użytkownika wymagany jest dostęp do odczytu i zapisu, a w uprawnieniach interfejsu API aplikacji jest wstępnie skonfigurowany zakres OAuth tylko do odczytu, zamiast zakresu OAuth tylko do odczytusdct-rnależy przekazaćsdct-w. W przeciwnym razie proces się nie powiedzie,a użytkownik zobaczy komunikat o błędzie.// Request access to Yahoo Mail API. provider_data.scopes.push_back("mail-r"); // This must be preconfigured in the app's API permissions. provider_data.scopes.push_back("sdct-w");Więcej informacji znajdziesz w dokumentacji zakresów Yahoo.
Po skonfigurowaniu danych dostawcy użyj ich do utworzenia obiektu FederatedOAuthProvider.
// Construct a FederatedOAuthProvider for use in Auth methods. firebase::auth::FederatedOAuthProvider provider(provider_data);Uwierzytelnij się w Firebase za pomocą obiektu dostawcy Uwierzytelniania. Pamiętaj, że w przeciwieństwie do innych operacji FirebaseAuth ta operacja przejmie kontrolę nad interfejsem, wyświetlając widok internetowy, w którym użytkownik może wpisać swoje dane logowania.
Aby rozpocząć proces logowania, wywołaj funkcję
SignInWithProvider:firebase::Future<firebase::auth::AuthResult> result = auth->SignInWithProvider(provider_data);Aplikacja może wtedy poczekać lub zarejestrować wywołanie zwrotne w obiekcie Future.
Powyższe przykłady dotyczą procesów logowania, ale możesz też połączyć dostawcę Yahoo z istniejącym użytkownikiem za pomocą funkcji
LinkWithProvider. Możesz na przykład połączyć wielu dostawców z tym samym użytkownikiem, aby mógł on logować się za pomocą dowolnego z nich.firebase::Future<firebase::auth::AuthResult> result = user.LinkWithProvider(provider_data);Ten sam wzorzec można stosować w przypadku funkcji
ReauthenticateWithProvider, która umożliwia pobieranie nowych danych logowania do operacji związanych z poufnymi danymi, które wymagają niedawnego zalogowania się.firebase::Future<firebase::auth::AuthResult> result = user.ReauthenticateWithProvider(provider_data);Aplikacja może wtedy poczekać lub zarejestrować wywołanie zwrotne w obiekcie Future.
Dalsze kroki
Gdy użytkownik zaloguje się po raz pierwszy, zostanie utworzone nowe konto użytkownika i połączone z danymi logowania, czyli nazwą użytkownika i hasłem, numerem telefonu lub informacjami o dostawcy uwierzytelniania, za pomocą których użytkownik się zalogował. Nowe konto jest przechowywane w projekcie w Firebase i może służyć do identyfikowania użytkownika we wszystkich aplikacjach w projekcie, niezależnie od sposobu logowania.
-
W aplikacjach możesz uzyskać podstawowe informacje o profilu użytkownika z obiektu
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(); }
W Firebase Realtime Database i Cloud Storage regułach bezpieczeństwa możesz pobrać unikalny identyfikator zalogowanego użytkownika ze zmiennej
authi użyć go do kontrolowania, do jakich danych użytkownik ma dostęp.
Możesz zezwolić użytkownikom na logowanie się w aplikacji za pomocą wielu dostawców uwierzytelniania, łącząc dane logowania dostawcy uwierzytelniania z istniejącym kontem użytkownika.
Aby wylogować użytkownika, wywołaj funkcję
SignOut():
auth->SignOut();