Uwierzytelnij za pomocą Yahoo i C++

Możesz umożliwić użytkownikom uwierzytelnianie w Firebase przy użyciu dostawców OAuth, takich jak Yahoo, integrując ogólne internetowe logowanie OAuth ze swoją aplikacją przy użyciu pakietu Firebase SDK, aby przeprowadzić pełny proces logowania. Ponieważ ten przepływ wymaga użycia telefonów Firebase SDK, jest obsługiwany tylko na platformach Android i Apple.

Zanim zaczniesz

  1. Dodaj Firebase do projektu C ++ .
  2. W konsoli Firebase otwórz sekcję Auth.
  3. Na karcie Logowanie w metodzie umożliwienia usługodawcy Yahoo.
  4. Dodaj identyfikator klienta oraz tajny z konsoli programisty dostawcy do konfiguracji operatora:
    1. Aby zarejestrować klienta Yahoo OAuth, wykonaj dokumentację programistów Yahoo sprawie rejestracji aplikacji internetowych z Yahoo .

      Koniecznie wybierz dwa uprawnienia API OpenID Connect: profile i email .

    2. Przy rejestracji aplikacje z tych dostawców, należy zarejestrować *.firebaseapp.com domenę dla swojego projektu jako przekierowania domeny dla swojej aplikacji.
  5. Kliknij przycisk Zapisz.

Uzyskaj dostęp do firebase::auth::Auth klasę

Auth klasa jest bramą do wszystkich wywołań API.
  1. Dodaj pliki nagłówka uwierzytelniania i aplikacji:
    #include "firebase/app.h"
    #include "firebase/auth.h"
    
  2. W kodzie inicjującym utwórz firebase::App klasy.
    #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. Nabyć firebase::auth::Auth klasę dla firebase::App . Istnieje odwzorowanie jeden do jednego między App i Auth .
    firebase::auth::Auth* auth = firebase::auth::Auth::GetAuth(app);
    

Obsługuj proces logowania za pomocą pakietu Firebase SDK

Aby obsłużyć proces logowania za pomocą pakietu Firebase SDK, wykonaj te czynności:

  1. Skonstruować instancję FederatedOAuthProviderData skonfigurowanych z odpowiednim dostawcą ID dla Yahoo.

    firebase::auth::FederatedOAuthProviderData
        provider_data(firebase::auth::YahooAuthProvider::kProviderId);
    
  2. Opcjonalnie: Określ dodatkowe parametry niestandardowe OAuth że chcesz wysłać z prośbą OAuth.

    // Prompt user to re-authenticate to Yahoo.
    provider_data.custom_parameters["prompt"] = "login";
    
    // Localize to French.
    provider_data.custom_parameters["language"] = "fr";
    

    Na podporach parametry Yahoo, zobacz dokumentację Yahoo OAuth . Należy pamiętać, że nie można przejść Firebase-wymagane parametry z custom_parameters() . Parametry te są client_id, redirect_uri, response_type, zakres i stan.

  3. Opcjonalnie: określić dodatkowe zakresy OAuth 2.0 poza profile i email , który chcesz wniosek dostawcy uwierzytelniania. Jeśli aplikacja wymaga dostępu do prywatnych danych użytkownika z Yahoo API, musisz żądanie uprawnieniami do Yahoo API pod Uprawnienia API w konsoli programisty Yahoo. Żądane zakresy OAuth muszą dokładnie odpowiadać wstępnie skonfigurowanym zakresom w uprawnieniach interfejsu API aplikacji. Na przykład, jeżeli odczytu / zapisu jest wymagany dostęp do kontaktów użytkownika i wstępnie skonfigurowane w uprawnieniach API aplikacji, sdct-w ma zostać przekazany zamiast tylko do odczytu zakresu OAuth sdct-r . W przeciwnym razie przepływ zakończy się niepowodzeniem, a użytkownikowi końcowemu zostanie wyświetlony błąd.

    // 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, należy zapoznać się z dokumentacją Yahoo zakresów .

  4. Po skonfigurowaniu danych dostawcy użyj ich do utworzenia FederatedOAuthProvider.

    // Construct a FederatedOAuthProvider for use in Auth methods.
    firebase::auth::FederatedOAuthProvider provider(provider_data);
    
  5. Uwierzytelnij się w Firebase przy użyciu obiektu dostawcy uwierzytelniania. Pamiętaj, że w przeciwieństwie do innych operacji FirebaseAuth ta funkcja przejmie kontrolę nad interfejsem użytkownika, wyświetlając widok internetowy, w którym użytkownik może wprowadzić swoje dane logowania.

    Aby rozpocząć znak w strumieniu, zadzwoń signInWithProvider :

    firebase::Future<firebase::auth::SignInResult> result =
      auth->SignInWithProvider(provider_data);
    

    Aplikacja może następnie poczekać lub zarejestrować wywołania zwrotnego na przyszłość .

  6. Choć powyższe przykłady koncentrują się na znaku w przepływach, masz również możliwość połączenia dostawcy Yahoo do istniejącego użytkownika z wykorzystaniem LinkWithProvider . Na przykład możesz połączyć wielu dostawców z tym samym użytkownikiem, umożliwiając im logowanie się za pomocą jednego z nich.

    firebase::Future<firebase::auth::SignInResult> result = user->LinkWithProvider(provider_data);
    
  7. Ten sam wzór może być stosowany z ReauthenticateWithProvider które mogą być wykorzystywane do pobierania świeże poświadczenia dla wrażliwych operacji, które wymagają ostatnie logowanie.

    firebase::Future<firebase::auth::SignInResult> result =
      user->ReauthenticateWithProvider(provider_data);
    

    Aplikacja może następnie poczekać lub zarejestrować wywołania zwrotnego na przyszłość .

Następne kroki

Gdy użytkownik zaloguje się po raz pierwszy, zostanie utworzone nowe konto użytkownika i połączone z poświadczeniami — czyli nazwą użytkownika i hasłem, numerem telefonu lub informacjami o dostawcy uwierzytelniania — przy użyciu których użytkownik się zalogował. To nowe konto jest przechowywane jako część projektu Firebase i może służyć do identyfikowania użytkownika w każdej aplikacji w projekcie, niezależnie od tego, jak się on loguje.

  • W aplikacjach, można uzyskać podstawowe informacje o profilu użytkownika z firebase::auth::User obiektu:

    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();
    }
    
  • W bazie danych Firebase Realtime i Cloud Storage zasad bezpieczeństwa , można uzyskać podpisanego w unikalnym identyfikatorem użytkownika użytkownika z auth zmiennej i użyć go do kontroli, jakie dane dostępu może użytkownik.

Można zezwolić użytkownikom na logowanie się do aplikacji przy użyciu wielu dostawców uwierzytelniania przez łączenie auth poświadczenia dostawcy do istniejącego konta użytkownika.

Aby wylogować użytkownika, zadzwoń SignOut() :

auth->SignOut();