Vous pouvez autoriser vos utilisateurs à s'authentifier auprès de Firebase à l'aide de fournisseurs OAuth tels que Yahoo en intégrant une connexion OAuth générique sur le Web à votre application à l'aide du SDK Firebase pour effectuer le flux de connexion de bout en bout. Comme ce flux nécessite l'utilisation des SDK Firebase basés sur les téléphones, elle n'est compatible qu'avec Android plates-formes Apple.
Avant de commencer
- Ajoutez Firebase à votre projet C++.
- Dans la console Firebase, ouvrez la section Authentification.
- Dans l'onglet Mode de connexion, activez le fournisseur Yahoo.
- Ajoutez l'ID client et le code secret du client de la console pour développeur de ce fournisseur au
configuration du fournisseur:
-
Pour enregistrer un client OAuth Yahoo, suivez les instructions du documentation sur l'enregistrement d'une application Web auprès de Yahoo.
Veillez à sélectionner les deux autorisations d'API OpenID Connect:
profile
etemail
. - Lorsque vous enregistrez des applications auprès de ces fournisseurs, veillez à enregistrer le
le domaine
*.firebaseapp.com
pour votre projet en tant que domaine de redirection pour votre l'application.
-
- Cliquez sur Enregistrer.
Accéder à la classe firebase::auth::Auth
La classe Auth
est la passerelle pour tous les appels d'API.
- Ajoutez les fichiers d'en-tête Auth et App :
#include "firebase/app.h" #include "firebase/auth.h"
- Dans votre code d'initialisation, créez une classe
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__)
- Procurez-vous la classe
firebase::auth::Auth
pour votrefirebase::App
. Il existe un mappage de type "un à un" entreApp
etAuth
.firebase::auth::Auth* auth = firebase::auth::Auth::GetAuth(app);
Gérer le flux de connexion avec le SDK Firebase
Pour gérer le flux de connexion avec le SDK Firebase, procédez comme suit :
Construire une instance d'un
FederatedOAuthProviderData
configuré avec l'ID de fournisseur approprié pour Yahoo.firebase::auth::FederatedOAuthProviderData provider_data(firebase::auth::YahooAuthProvider::kProviderId);
Facultatif : spécifiez des paramètres OAuth personnalisés supplémentaires que vous souhaitez envoyer avec la requête OAuth.
// Prompt user to re-authenticate to Yahoo. provider_data.custom_parameters["prompt"] = "login"; // Localize to French. provider_data.custom_parameters["language"] = "fr";
Pour connaître les paramètres acceptés par Yahoo, consultez la documentation Yahoo OAuth. Notez que vous ne pouvez pas transmettre de paramètres requis par Firebase avec
custom_parameters()
. Ces paramètres sont client_id, redirect_uri, response_type, scope et state.Facultatif : spécifiez des champs d'application OAuth 2.0 supplémentaires au-delà de
profile
etemail
que vous souhaitez demander au fournisseur d'authentification. Si votre requiert l'accès aux données d'utilisateur privées des API Yahoo, vous devez avez besoin de demander des autorisations pour les API Yahoo sous Autorisations des API dans Console pour les développeurs Yahoo. Les champs d'application OAuth demandés doivent correspondre exactement à ceux préconfigurés dans les autorisations d'API de l'application. Par exemple, si un accès en lecture/écriture l'accès est demandé aux contacts des utilisateurs et préconfiguré dans l'API de l'application autorisations,sdct-w
doit être transmis au lieu du champ d'application OAuth en lecture seulesdct-r
Sinon,le flux échouera et une erreur sera affichée au un utilisateur final.// 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");
Pour en savoir plus, consultez la documentation sur les champs d'application Yahoo.
Une fois les données de votre fournisseur configurées, utilisez-les pour créer FederatedOAuthProvider.
// Construct a FederatedOAuthProvider for use in Auth methods. firebase::auth::FederatedOAuthProvider provider(provider_data);
Authentifiez-vous avec Firebase à l'aide de l'objet du fournisseur d'authentification. Notez que contrairement d'autres opérations FirebaseAuth, elle prendra le contrôle de votre UI une vue Web dans laquelle l'utilisateur peut saisir ses identifiants.
Pour démarrer le flux de connexion, appelez
SignInWithProvider
:firebase::Future<firebase::auth::AuthResult> result = auth->SignInWithProvider(provider_data);
Il est possible que votre application attende ou enregistrer un rappel sur l'objet Future ;
Si les exemples ci-dessus se concentrent sur les procédures de connexion, possibilité d'associer un fournisseur Yahoo à un utilisateur existant à l'aide de
LinkWithProvider
Par exemple, vous pouvez associer plusieurs fournisseurs au même utilisateur, ce qui lui permet de se connecter avec l'un ou l'autre.firebase::Future<firebase::auth::AuthResult> result = user.LinkWithProvider(provider_data);
Le même schéma peut être utilisé avec
ReauthenticateWithProvider
, qui peut être utilisé pour récupérer de nouveaux identifiants pour les opérations sensibles qui nécessitent une connexion récente.firebase::Future<firebase::auth::AuthResult> result = user.ReauthenticateWithProvider(provider_data);
Votre application peut ensuite attendre ou enregistrer un rappel sur le Future.
Étapes suivantes
Lorsqu'un utilisateur se connecte pour la première fois, un compte utilisateur est créé et associé aux identifiants (nom et mot de passe de l'utilisateur, numéro de téléphone ou informations du fournisseur d'authentification) avec lesquels l'utilisateur s'est connecté. Cette nouvelle est stocké dans votre projet Firebase et peut servir à identifier un utilisateur dans toutes les applications de votre projet, quelle que soit la façon dont l'utilisateur se connecte.
-
Dans vos applications, vous pouvez obtenir les informations de base du profil de l'utilisateur à partir des <ph type="x-smartling-placeholder"></ph> Objet
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(); }
Dans votre Firebase Realtime Database et votre Cloud Storage Règles de sécurité, vous pouvez obtenez l'ID utilisateur unique de l'utilisateur connecté à partir de la variable
auth
et l'utiliser pour contrôler les données auxquelles un utilisateur peut accéder.
Vous pouvez autoriser les utilisateurs à se connecter à votre application à l'aide de plusieurs fournisseurs d'authentification en associant les identifiants du fournisseur d'authentification à un compte utilisateur existant.
Pour déconnecter un utilisateur, appelez .
SignOut()
:
auth->SignOut();