Mit Yahoo und C++ authentifizieren

Sie können Ihren Nutzern die Authentifizierung bei Firebase mithilfe von OAuth-Anbietern wie Yahoo durch Integration eines webbasierten generischen OAuth-Logins in Ihre Anwendung mithilfe der Firebase SDK für die vollständige Anmeldung Da für diesen Ablauf die Verwendung der smartphonebasierten Firebase SDKs erforderlich ist, wird er nur auf Android- und Apple-Plattformen unterstützt.

Hinweis

  1. Fügen Sie Firebase zu Ihrem C++-Projekt hinzu.
  2. Öffnen Sie in der Firebase Console den Bereich Auth.
  3. Aktivieren Sie auf dem Tab Anmeldemethode den Anbieter Yahoo.
  4. Fügen Sie die Client-ID und den Clientschlüssel aus der Entwicklerkonsole dieses Anbieters hinzu. Anbieterkonfiguration:
    1. Um einen Yahoo-OAuth-Client zu registrieren, folgen Sie dem Yahoo-Entwickler Dokumentation zu Registrierung einer Webanwendung bei Yahoo.

      Wählen Sie die beiden OpenID Connect API-Berechtigungen profile und email aus.

    2. Wenn Sie Apps bei diesen Anbietern registrieren, müssen Sie die *.firebaseapp.com-Domain für Ihr Projekt als Weiterleitungsdomain für Ihre App registrieren.
  5. Klicken Sie auf Speichern.

Auf die Klasse firebase::auth::Auth zugreifen

Die Klasse Auth ist das Gateway für alle API-Aufrufe.
  1. Fügen Sie die Auth- und App-Headerdateien hinzu:
    #include "firebase/app.h"
    #include "firebase/auth.h"
  2. Erstellen Sie in Ihrem Initialisierungscode eine firebase::App-Klasse.
    #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. Rufen Sie die firebase::auth::Auth-Klasse für Ihre firebase::App ab. Es gibt eine Eins-zu-Eins-Zuordnung zwischen App und Auth.
    firebase::auth::Auth* auth = firebase::auth::Auth::GetAuth(app);

Anmeldevorgang mit dem Firebase SDK durchführen

So führen Sie den Anmeldevorgang mit dem Firebase SDK aus:

  1. Instanz einer FederatedOAuthProviderData erstellen, die konfiguriert wurde mit die für Yahoo.

    firebase::auth::FederatedOAuthProviderData
        provider_data(firebase::auth::YahooAuthProvider::kProviderId);
    
  2. Optional: Geben Sie zusätzliche benutzerdefinierte OAuth-Parameter an, die mit der OAuth-Anfrage gesendet werden sollen.

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

    Informationen zu den von Yahoo unterstützten Parametern finden Sie in der Yahoo OAuth-Dokumentation. Beachten Sie, dass Sie keine für Firebase erforderlichen Parameter mit custom_parameters() Diese Parameter sind client_id, redirect_uri, response_type, scope und state.

  3. Optional: Geben Sie neben profile und weiteren OAuth 2.0-Bereichen weitere OAuth 2.0-Bereiche an. email, die Sie vom Authentifizierungsanbieter anfordern möchten. Wenn Ihr Anwendung Zugriff auf private Nutzerdaten von Yahoo-APIs benötigt, können Sie müssen Sie Berechtigungen für Yahoo! APIs unter API Permissions (API-Berechtigungen) im Yahoo!-Entwicklerkonsole Die angeforderten OAuth-Bereiche müssen genau mit den in den API-Berechtigungen der App vorkonfigurierten Bereichen übereinstimmen. Wenn beispielsweise Lese-/Schreibzugriff auf die Kontakte des Nutzers angefordert und in den API-Berechtigungen der App vorkonfiguriert wird, muss sdct-w anstelle des OAuth-Bereichs „Lesezugriff“ sdct-r übergeben werden. Andernfalls schlägt der Ablauf fehl und dem Endnutzer wird eine Fehlermeldung angezeigt.

    // 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");
    

    Weitere Informationen finden Sie im Dokumentation zu den Yahoo-Bereichen

  4. Nachdem Sie Ihre Anbieterdaten konfiguriert haben, können Sie damit eine FederatedOAuthProvider.

    // Construct a FederatedOAuthProvider for use in Auth methods.
    firebase::auth::FederatedOAuthProvider provider(provider_data);
    
  5. Authentifizierung mit Firebase über das Auth-Anbieterobjekt. Im Gegensatz zu anderen FirebaseAuth-Vorgängen hinzugefügt wurde, wird die Benutzeroberfläche gesteuert, Webansicht öffnen, in der der Nutzer seine Anmeldedaten eingeben kann.

    Rufe SignInWithProvider auf, um den Anmeldevorgang zu starten:

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

    Ihre Anwendung wartet dann möglicherweise oder einen Callback für das Future registrieren

  6. Die obigen Beispiele konzentrieren sich zwar auf Anmeldeabläufe, Sie haben aber auch die Möglichkeit, einen Yahoo-Anbieter mithilfe von LinkWithProvider Sie können beispielsweise mehrere Anbieter mit demselben Nutzer verknüpfen, damit er sich mit einem beliebigen davon anmelden kann.

    firebase::Future<firebase::auth::AuthResult> result = user.LinkWithProvider(provider_data);
    
  7. Dasselbe Muster kann mit ReauthenticateWithProvider verwendet werden, wobei werden zum Abrufen neuer Anmeldedaten für vertrauliche Vorgänge verwendet, die Letzte Anmeldung

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

    Ihre Anwendung wartet dann entweder oder registriert einen Rückruf auf in die Zukunft.

Nächste Schritte

Nachdem sich ein Nutzer zum ersten Mal angemeldet hat, wird ein neues Nutzerkonto erstellt und die mit den Anmeldedaten verknüpft sind, d. h. Nutzername und Passwort, oder Authentifizierungsanbieter-Informationen – also für den Nutzer, mit dem sich der Nutzer angemeldet hat. Dieses neue Konto wird als Teil Ihres Firebase-Projekts gespeichert und kann verwendet werden, um einen Nutzer in allen Apps in Ihrem Projekt zu identifizieren, unabhängig davon, wie er sich anmeldet.

  • Die grundlegenden Profilinformationen der Nutzer finden Sie in Ihren Apps über die firebase::auth::User-Objekt:

    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();
    }
  • In Firebase Realtime Database und Cloud Storage Sicherheitsregeln können Sie die eindeutige Nutzer-ID des angemeldeten Nutzers aus der Variablen auth abrufen, und steuern, auf welche Daten ein Nutzer zugreifen kann.

Sie können Nutzern erlauben, sich mit Mehrfachauthentifizierung in Ihrer App anzumelden indem Sie die Anmeldedaten des Authentifizierungsanbieters mit einem eines bestehenden Nutzerkontos.

Wenn Sie einen Nutzer abmelden möchten, rufen Sie SignOut() auf:

auth->SignOut();