Uwierzytelnij przez Yahoo i C++

Aby umożliwić użytkownikom uwierzytelnianie w Firebase za pomocą dostawców protokołu OAuth, takich jak Yahoo, możesz zintegrować z aplikacją ogólne internetowe logowanie OAuth przy użyciu pakietu SDK Firebase, aby przeprowadzić kompleksowy proces logowania. Ten proces wymaga użycia pakietów SDK Firebase na telefon, dlatego jest obsługiwany tylko na platformach Android i Apple.

Zanim zaczniesz

  1. Dodaj Firebase do projektu C++.
  2. W konsoli Firebase otwórz sekcję Uwierzytelnianie.
  3. Na karcie Metoda logowania włącz dostawcę Yahoo.
  4. Dodaj Client ID (Identyfikator klienta) i Client Secret (Tajny klucz klienta) z konsoli programisty tego dostawcy do konfiguracji dostawcy:
    1. Aby zarejestrować klienta OAuth, postępuj zgodnie z instrukcjami dla deweloperów Yahoo dotyczącymi rejestrowania aplikacji internetowej w Yahoo.

      Wybierz 2 uprawnienia interfejsu OpenID Connect API: profile i email.

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

Uzyskaj dostęp do zajęć firebase::auth::Auth

Klasa Auth jest bramą dla wszystkich wywołań interfejsu API.
  1. Dodaj pliki nagłówka uwierzytelniania i aplikacji:
    #include "firebase/app.h"
    #include "firebase/auth.h"
    
  2. 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__)
    
  3. Uzyskaj zajęcia firebase::auth::Auth związane z urządzeniem firebase::App. Między App a Auth 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:

  1. Utwórz instancję FederatedOAuthProviderData skonfigurowaną za pomocą identyfikatora dostawcy odpowiedniego dla Yahoo.

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

  3. Opcjonalnie: określ dodatkowe zakresy protokołu OAuth 2.0 poza zakresami profile i email, które chcesz żądać od dostawcy 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 dotyczące interfejsu API w konsoli programisty Yahoo. Żądane zakresy protokołu OAuth muszą być dokładnie takie same jak te wstępnie skonfigurowane w uprawnieniach interfejsu API aplikacji. Jeśli na przykład żądanie dostępu do odczytu i zapisu jest wysyłane do kontaktów użytkownika i jest wstępnie skonfigurowane w uprawnieniach interfejsu API aplikacji, należy przekazać sdct-w zamiast zakresu protokołu OAuth tylko do odczytu sdct-r. W przeciwnym razie przepływ zakończy się niepowodzeniem,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.

  4. Gdy dane dostawcy zostaną skonfigurowane, użyj ich do utworzenia obiektu FederatedOAuthProvider.

    // Construct a FederatedOAuthProvider for use in Auth methods.
    firebase::auth::FederatedOAuthProvider provider(provider_data);
    
  5. Uwierzytelniaj w Firebase za pomocą obiektu dostawcy uwierzytelniania. Pamiętaj, że w przeciwieństwie do innych operacji FirebaseAuth da to kontrolę nad interfejsem użytkownika – wyświetli się widok witryny, 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);
    

    Aplikacja może zaczekać lub zarejestrować wywołanie zwrotne w przyszłości.

  6. Powyższe przykłady koncentrują się na procesach logowania, ale możesz też połączyć dostawcę Yahoo z dotychczasowym użytkownikiem za pomocą LinkWithProvider. Możesz na przykład połączyć kilku dostawców z tym samym użytkownikiem, umożliwiając im logowanie się za pomocą dowolnej z tych usług.

    firebase::Future<firebase::auth::AuthResult> result = user.LinkWithProvider(provider_data);
    
  7. Tego samego wzorca można używać z zasadą ReauthenticateWithProvider, która umożliwia pobieranie nowych danych logowania na potrzeby poufnych operacji, które wymagają niedawnego zalogowania.

    firebase::Future<firebase::auth::AuthResult> result =
      user.ReauthenticateWithProvider(provider_data);
    

    Aplikacja może wtedy zaczekać lub zarejestrować wywołanie zwrotne w przyszłości.

Dalsze kroki

Gdy użytkownik loguje się po raz pierwszy, tworzone jest nowe konto użytkownika, które jest łączone z danymi logowania (nazwa użytkownika i hasło, numer telefonu lub informacje o dostawcy uwierzytelniania). Nowe konto jest przechowywane w ramach Twojego projektu Firebase i może być używane do identyfikowania użytkowników we wszystkich aplikacjach w Twoim 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.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 regułach zabezpieczeń Bazy danych czasu rzeczywistego Firebase i Cloud Storage możesz pobrać ze zmiennej auth unikalny identyfikator użytkownika zalogowanego użytkownika i użyć go do kontrolowania, do jakich danych użytkownik ma dostęp.

Możesz zezwolić użytkownikom na logowanie się w aplikacji przy użyciu różnych dostawców uwierzytelniania, łącząc dane logowania dostawcy uwierzytelniania z istniejącym kontem użytkownika.

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

auth->SignOut();