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 swojego projektu C++ .
  2. W konsoli Firebase otwórz sekcję Auth .
  3. Na karcie Metoda logowania włącz dostawcę Yahoo .
  4. Dodaj identyfikator klienta i klucz tajny klienta z konsoli programisty tego dostawcy do konfiguracji dostawcy:
    1. Aby zarejestrować klienta Yahoo OAuth, postępuj zgodnie z dokumentacją programisty Yahoo dotyczącą rejestracji aplikacji internetowej w Yahoo .

      Pamiętaj, aby wybrać dwa uprawnienia OpenID Connect API: profile i e- email .

    2. Rejestrując aplikacje u tych dostawców, pamiętaj, aby zarejestrować domenę *.firebaseapp.com projektu jako domenę przekierowania aplikacji.
  5. Kliknij Zapisz .

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

Klasa Auth jest bramą dla wszystkich wywołań API.
  1. Dodaj pliki nagłówkowe Auth i App:
    #include "firebase/app.h"
    #include "firebase/auth.h"
    
  2. W kodzie inicjującym 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__)
    
  3. Uzyskaj klasę firebase::auth::Auth dla swojej firebase::App . Istnieje mapowanie 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 następujące kroki:

  1. Utwórz wystąpienie FederatedOAuthProviderData skonfigurowane z identyfikatorem dostawcy odpowiednim dla Yahoo.

    firebase::auth::FederatedOAuthProviderData
        provider_data(firebase::auth::YahooAuthProvider::kProviderId);
    
  2. Opcjonalnie : określ dodatkowe niestandardowe parametry OAuth, które chcesz wysł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 można znaleźć w dokumentacji Yahoo OAuth . Pamiętaj, że za pomocą custom_parameters() nie możesz przekazać parametrów wymaganych przez Firebase. Te parametry to client_id , redirect_uri , response_type , scope i state .

  3. Opcjonalnie : określ dodatkowe zakresy protokołu OAuth 2.0 poza profile i adresem email -mail, o które chcesz poprosić dostawcę uwierzytelniania. Jeśli Twoja aplikacja wymaga dostępu do prywatnych danych użytkownika z interfejsów Yahoo API, musisz poprosić o uprawnienia do interfejsów Yahoo API w sekcji 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śli dostęp do odczytu/zapisu jest wymagany do kontaktów użytkownika i wstępnie skonfigurowany w uprawnieniach interfejsu API aplikacji, należy przekazać sdct-w zamiast sdct-r zakresu OAuth tylko do odczytu. 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, zapoznaj się z dokumentacją zakresów Yahoo .

  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 uwierzytelniające.

    Aby rozpocząć proces logowania, wywołaj signInWithProvider :

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

    Twoja aplikacja może wtedy czekać lub zarejestrować oddzwonienie w przyszłości .

  6. Chociaż powyższe przykłady koncentrują się na przepływach logowania, możesz również połączyć dostawcę Yahoo z istniejącym użytkownikiem za pomocą 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 wzorzec może być używany z ReauthenticateWithProvider , który może służyć do pobierania świeżych poświadczeń dla poufnych operacji, które wymagają niedawnego logowania.

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

    Twoja aplikacja może wtedy czekać lub zarejestrować oddzwonienie w przyszłości .

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 — za pomocą 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 swoich aplikacjach możesz uzyskać podstawowe informacje o profilu użytkownika z obiektu firebase::auth::User :

    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 regułach bezpieczeństwa bazy danych czasu rzeczywistego i usługi Cloud Storage Firebase możesz uzyskać unikalny identyfikator zalogowanego użytkownika ze zmiennej auth i używać go do kontrolowania, do jakich danych użytkownik może uzyskać dostęp.

Możesz zezwolić użytkownikom na logowanie się do Twojej aplikacji przy użyciu wielu dostawców uwierzytelniania, łącząc poświadczenia dostawcy uwierzytelniania z istniejącym kontem użytkownika.

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

auth->SignOut();