Sie können Ihren Nutzern die Authentifizierung mit Firebase über OAuth-Anbieter wie Yahoo ermöglichen, indem Sie die webbasierte generische OAuth-Anmeldung mithilfe des Firebase SDK in Ihre App einbinden, um den gesamten Anmeldevorgang durchzuführen. Da für diesen Vorgang die auf Mobilgeräten basierenden Firebase SDKs verwendet werden müssen, wird er nur auf Android- und Apple-Plattformen unterstützt.
Hinweis
- Fügen Sie Ihrem C++-Projekt Firebase hinzu.
- Rufen Sie in der Firebase Console Security > Authentication auf.
- Aktivieren Sie auf dem Tab Anmeldemethode den Anmeldeanbieter Yahoo sign-in.
-
Fügen Sie der Anbieterkonfiguration die Client-ID und das Clientschlüssel aus der Entwicklerkonsole des Anbieters hinzu:
-
Folgen Sie der Yahoo-Entwickler dokumentation zum Registrieren einer Webanwendung bei Yahoo, um einen Yahoo-OAuth-Client zu registrieren.
Wählen Sie die beiden OpenID Connect API-Berechtigungen
profileundemailaus. -
Wenn Sie Apps bei diesen Anbietern registrieren, registrieren Sie die
*.firebaseapp.comDomain für Ihr Projekt als Weiterleitungs Domain für Ihre App.
-
- Klicken Sie auf Speichern.
Auf die Klasse firebase::auth::Auth zugreifen
Die Klasse Auth ist das Gateway für alle API-Aufrufe.
- Fügen Sie die Headerdateien „Auth“ und „App“ hinzu:
#include "firebase/app.h" #include "firebase/auth.h"
- 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__)
- Rufen Sie die Klasse
firebase::auth::Authfür Ihrefirebase::Appab. Es gibt eine 1:1-Zuordnung zwischenAppundAuth.firebase::auth::Auth* auth = firebase::auth::Auth::GetAuth(app);
Anmeldevorgang mit dem Firebase SDK verarbeiten
So verarbeiten Sie den Anmeldevorgang mit dem Firebase SDK:
Erstellen Sie eine Instanz von
FederatedOAuthProviderData, die mit der für Yahoo geeigneten Anbieter-ID konfiguriert ist.firebase::auth::FederatedOAuthProviderData provider_data(firebase::auth::YahooAuthProvider::kProviderId);Optional: Geben Sie zusätzliche benutzerdefinierte OAuth-Parameter an, die Sie mit der OAuth-Anfrage senden möchten.
// 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 mit
custom_parameters()keine für Firebase erforderlichen Parameter übergeben können. Diese Parameter sind client_id, redirect_uri, response_type, scope und state.Optional: Geben Sie zusätzliche OAuth 2.0-Bereiche über
profileundemailhinaus an, die Sie vom Authentifizierungsanbieter anfordern möchten. Wenn Ihre Anwendung Zugriff auf private Nutzerdaten aus Yahoo APIs benötigt, müssen Sie in der Yahoo-Entwicklerkonsole unter API-Berechtigungen Berechtigungen für Yahoo APIs anfordern. Die angeforderten OAuth-Bereiche müssen genau mit den vorkonfigurierten Bereichen in den API-Berechtigungen der App übereinstimmen. Wenn beispielsweise Lese-/Schreibzugriff auf Nutzerkontakte angefordert und in den API-Berechtigungen der App vorkonfiguriert ist, musssdct-wanstelle des schreibgeschützten OAuth-Bereichssdct-rübergeben werden. Andernfalls schlägt der Vorgang 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 in der Dokumentation zu Yahoo-Bereichen.
Nachdem Sie Ihre Anbieterdaten konfiguriert haben, können Sie damit einen FederatedOAuthProvider erstellen.
// Construct a FederatedOAuthProvider for use in Auth methods. firebase::auth::FederatedOAuthProvider provider(provider_data);Authentifizieren Sie sich mit Firebase über das Auth-Anbieterobjekt. Beachten Sie, dass im Gegensatz zu anderen FirebaseAuth-Vorgängen hier die Steuerung der Benutzeroberfläche übernommen wird, indem eine Webansicht eingeblendet wird, in der der Nutzer seine Anmeldedaten eingeben kann.
Rufen Sie
SignInWithProviderauf, um den Anmeldevorgang zu starten:firebase::Future<firebase::auth::AuthResult> result = auth->SignInWithProvider(provider_data);Ihre Anwendung kann dann warten oder einen Callback für die Future registrieren.
In den obigen Beispielen geht es um Anmeldevorgänge. Sie können aber auch mit
LinkWithProvidereinen Yahoo-Anbieter mit einem vorhandenen Nutzer verknüpfen. So können Sie beispielsweise mehrere Anbieter mit demselben Nutzer verknüpfen, damit er sich mit beiden anmelden kann.firebase::Future<firebase::auth::AuthResult> result = user.LinkWithProvider(provider_data);Dasselbe Muster kann mit
ReauthenticateWithProviderverwendet werden, um neue Anmeldedaten für vertrauliche Vorgänge abzurufen, für die eine aktuelle Anmeldung erforderlich ist.firebase::Future<firebase::auth::AuthResult> result = user.ReauthenticateWithProvider(provider_data);Ihre Anwendung kann dann warten oder einen Callback für die Future registrieren.
Nächste Schritte
Nachdem sich ein Nutzer zum ersten Mal angemeldet hat, wird ein neues Nutzerkonto erstellt und mit den Anmeldedaten verknüpft, mit denen sich der Nutzer angemeldet hat, also mit dem Nutzernamen und Passwort, der Telefonnummer oder den Informationen des Authentifizierungsanbieters. Dieses neue Konto wird als Teil Ihres Firebase-Projekts gespeichert und kann verwendet werden, um einen Nutzer in allen Apps Ihres Projekts zu identifizieren, unabhängig davon, wie sich der Nutzer anmeldet.
-
In Ihren Apps können Sie die grundlegenden Profilinformationen des Nutzers aus dem
firebase::auth::UserObjekt abrufen: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 den Firebase Realtime Database und Cloud Storage Sicherheitsregeln können Sie die eindeutige Nutzer-ID des angemeldeten Nutzers aus der Variablen
authabrufen und damit steuern, auf welche Daten ein Nutzer zugreifen kann.
Sie können Nutzern die Anmeldung in Ihrer App mit mehreren Authentifizierungsanbietern ermöglichen, indem Sie die Anmeldedaten des Authentifizierungsanbieters mit einem vorhandenen Nutzerkonto verknüpfen.
Rufen Sie
SignOut() auf, um einen Nutzer abzumelden:
auth->SignOut();