Możesz zezwolić użytkownikom na uwierzytelnianie w Firebase za pomocą dostawców protokołu OAuth, takich jak Yahoo, integrując w aplikacji ogólne internetowe logowanie OAuth przy użyciu pakietu SDK Firebase, aby przeprowadzić kompleksowy proces logowania. Ponieważ ten proces wymaga przez telefon, jest on obsługiwany tylko Platformy Apple.
Zanim zaczniesz
- Dodaj Firebase do projektu C++.
- W konsoli Firebase otwórz sekcję Uwierzytelnianie.
- Na karcie Metoda logowania włącz dostawcę Yahoo.
- Dodaj Client ID (Identyfikator klienta) i Client Secret (Tajny klucz klienta) z konsoli programisty tego dostawcy do
konfiguracja dostawcy:
-
Aby zarejestrować klienta Yahoo OAuth, postępuj zgodnie z instrukcjami dewelopera Yahoo dokumentacja dotycząca podczas rejestracji w usłudze Yahoo.
Wybierz 2 uprawnienia interfejsu OpenID Connect API:
profile
iemail
. - Podczas rejestrowania aplikacji u tych dostawców pamiętaj o zarejestrowaniu
Domena
*.firebaseapp.com
dla Twojego projektu jako domena przekierowująca Twojego projektu .
-
- 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);
Zarejestruj się za pomocą pakietu SDK Firebase
Aby zalogować się za pomocą pakietu SDK Firebase, wykonaj te czynności:
Utwórz instancję instancji
FederatedOAuthProviderData
skonfigurowaną za pomocą identyfikator dostawcy odpowiedni dla Yahoo.firebase::auth::FederatedOAuthProviderData provider_data(firebase::auth::YahooAuthProvider::kProviderId);
Opcjonalnie: określ dodatkowe niestandardowe parametry OAuth, które chcesz stosować wysyłać 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";
Parametry obsługiwane przez Yahoo znajdziesz Dokumentacja Yahoo OAuth. Pamiętaj, że parametrów wymaganych przez Firebase nie można przekazywać za pomocą funkcji
custom_parameters()
Te parametry to client_id, redirect_uri, response_type, scope i state.Opcjonalnie: określ dodatkowe zakresy protokołu OAuth 2.0 poza
profile
iemail
, o które chcesz poprosić dostawcę uwierzytelniania. Jeśli aplikacja wymaga dostępu do prywatnych danych użytkownika z interfejsów API Yahoo, poprosić o uprawnienia do interfejsów Yahoo API w sekcji API Permissions (Uprawnienia API) Yahoo Developer Console. Żądane zakresy protokołu OAuth muszą być dokładnie takie same jak już skonfigurowane w uprawnieniach interfejsu API aplikacji. Jeśli na przykład odczyt/zapis dostęp jest wysyłany do kontaktów użytkownika i wstępnie skonfigurowany w interfejsie API aplikacji uprawnień, należy przekazaćsdct-w
zamiast zakresu protokołu OAuth tylko do odczytusdct-r
W przeciwnym razie przepływ zakończy się niepowodzeniem,a moduł wyświetli komunikat o błędzie użytkownika końcowego.// 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");
Aby dowiedzieć się więcej, zapoznaj się z Dokumentacja zakresów Yahoo.
Po skonfigurowaniu danych dostawcy użyj ich do utworzenia FederatedOAuthProvider.
// Construct a FederatedOAuthProvider for use in Auth methods. firebase::auth::FederatedOAuthProvider provider(provider_data);
Uwierzytelniaj w Firebase za pomocą obiektu dostawcy uwierzytelniania. Pamiętaj, że w przeciwieństwie do inne operacje FirebaseAuth, przejmie ono kontrolę nad interfejsem użytkownika, otwórz widok internetowy, w którym użytkownik może wpisać swoje dane logowania.
Aby rozpocząć procedurę logowania, zadzwoń pod numer
SignInWithProvider
:firebase::Future<firebase::auth::AuthResult> result = auth->SignInWithProvider(provider_data);
Następnie należy zaczekać zarejestrować oddzwonienie w przyszłości.
Powyższe przykłady dotyczą procesu logowania, ale masz też możliwość połączenia dostawcy Yahoo z istniejącym użytkownikiem za pomocą
LinkWithProvider
Możesz na przykład połączyć kilka dostawców usług dla tego samego użytkownika, umożliwiając im logowanie się za pomocą dowolnej z nich.firebase::Future<firebase::auth::AuthResult> result = user.LinkWithProvider(provider_data);
Tego samego wzorca można użyć w obiekcie
ReauthenticateWithProvider
, który może być służy do pobierania nowych danych logowania na potrzeby operacji poufnych, które wymagają ostatniego logowania.firebase::Future<firebase::auth::AuthResult> result = user.ReauthenticateWithProvider(provider_data);
Aplikacja może zaczekać lub zarejestrować oddzwonienie przyszłości.
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();