126 votes

Obtenir des informations sur l'utilisateur via l'API Google

Est-il possible d'obtenir des informations du profil de l'utilisateur via l'API Google? Si c'est possible, quelle API devrais-je utiliser?

Je suis intéressé par ces informations:

Il serait également cool d'obtenir d'autres informations du profil de l'utilisateur.

155voto

Abhinav Points 2633

Ajoutez ceci à la portée - https://www.googleapis.com/auth/userinfo.profile

Et une fois l'autorisation obtenue, obtenez les informations depuis - https://www.googleapis.com/oauth2/v1/userinfo?alt=json

Il y a plein de choses - y compris le nom, l'url du profil public, le genre, la photo etc.

1 votes

J'ai utilisé les URL ci-dessus mais n'ai pas pu obtenir le profil de l'utilisateur. Je reçois seulement '{'. Pouvez-vous poster du code ou des liens s'il vous plaît. Merci d'avance.

0 votes

Uhm, il suffit d'autoriser la demande avec OAuth 2. Cette URL renvoie des données pour l'utilisateur actuellement connecté. Vous obtiendrez une erreur si vous faites la demande sans envoyer l'en-tête OAuth.

23 votes

L'URL que vous avez fournie fonctionne parfaitement, c'est-à-dire googleapis.com/oauth2/v1/userinfo. Mais pouvez-vous me dire d'où vous avez obtenu cette URL? J'ai essayé de la rechercher mais je ne l'ai trouvée nulle part. Google répertorie-t-il ces URL quelque part?

105voto

eason Points 458

Portée - https://www.googleapis.com/auth/userinfo.profile

retournez votre access_token = access_token

obtenez https://www.googleapis.com/oauth2/v1/userinfo?alt=json&access_token=youraccess_token

vous obtiendrez du JSON :

{
 "id": "xx",
 "name": "xx",
 "given_name": "xx",
 "family_name": "xx",
 "link": "xx",
 "picture": "xx",
 "gender": "xx",
 "locale": "xx"
}

Pour Tahir Yasin :

Ceci est un exemple en PHP.
Vous pouvez utiliser la fonction json_decode pour obtenir un tableau userInfo.

$q = 'https://www.googleapis.com/oauth2/v1/userinfo?access_token=xxx';
$json = file_get_contents($q);
$userInfoArray = json_decode($json,true);
$googleEmail = $userInfoArray['email'];
$googleFirstName = $userInfoArray['given_name'];
$googleLastName = $userInfoArray['family_name'];

1 votes

Comment puis-je utiliser leur réponse?

0 votes

Comment puis-je obtenir l'adresse e-mail en plus des autres informations que vous avez mentionnées ?

0 votes

Veuillez mettre à jour le code pour avoir le format correct permettant d'accéder aux propriétés de $ userInfoArray. Il devrait être comme $ userInfoArray ['email'] pour obtenir l'adresse e-mail du $ userInfoArray. NOTEZ L'UTILISATION DES APOSTROPHES POUR ACCÉDER AUX PROPRIÉTÉS.

35voto

Glen Thompson Points 1231

Ceci est mal documenté / il y a eu des changements. Je vous recommanderais de consulter ce lien pour obtenir des endpoints à jour.

À partir de 2021, le bon endpoint pour userinfo est

https://www.googleapis.com/oauth2/v1/userinfo

Donc une fois que vous obtenez le access_token, vous pouvez faire

curl -X GET "https://www.googleapis.com/oauth2/v1/userinfo" \
   -H "Authorization: Bearer "

Important : Pour obtenir toutes les informations dont vous avez besoin, utilisez la scope de openid email profile.

{
 'sub': '',
 'name': '',
 'given_name': '',
 'family_name': '',
 'picture': '',
 'email': '',
 'email_verified': True,
 'locale': 'en'
}

1 votes

J'avais du mal à trouver le champ de l'e-mail spécifiquement, et cette réponse a résolu mon problème! Je peux vérifier que cela fonctionne. Merci!

4 votes

Super utile et correcte réponse 2021--dans mon cas le champ 'sub' était id et 'email_verified' était verified_email, en utilisant un GET avec un jeton Bearer de v2 et les URL v1 googleapis.com/oauth2/v2/userinfo cependant l'URL v3 affiche les champs sub et email_verified, essayez avec GET+Bearer pour googleapis.com/oauth2/v3/userinfo

0 votes

Ah intéressant, je ne prêtais pas trop attention à la version mais il semble y avoir des différences de réponse entre elles.

28voto

user872858 Points 141

Ce scope https://www.googleapis.com/auth/userinfo.profile a été désapprouvé maintenant. Veuillez consulter https://developers.google.com/+/api/auth-migration#timetable.

Nouveau scope que vous utiliserez pour obtenir des informations de profil est : profil ou https://www.googleapis.com/auth/plus.login

et le point final est - https://www.googleapis.com/plus/v1/people/{userId} - userId peut être simplement 'me' pour l'utilisateur actuellement connecté.

0 votes

Cette information est importante pour garantir l'intégration future. Plus d'informations sur les scopes obsolètes developers.google.com/+/web/api/rest/oauth

0 votes

Et pourtant ... Si vous demandez directement la portée "plus.me", d'autres portées OAuth de Google+ ou si vous effectuez des appels d'API Google+, veuillez vous assurer de supprimer ces demandes de votre projet avant le 7 mars 2019. -- Google

26voto

1469 Points 132

Je suis en train d'utiliser PHP et j'ai résolu cela en utilisant la version 1.1.4 de google-api-php-client

En supposant que le code suivant est utilisé pour rediriger un utilisateur vers la page d'authentification Google:

 $client = new Google_Client();
 $client->setAuthConfigFile('/chemin/vers/le/fichier/de/configuration/ici');
 $client->setRedirectUri('https://rediriger/url/ici');
 $client->setAccessType('hors-ligne'); //optionnel
 $client->setScopes(['profil']); //ou email
 $auth_url = $client->createAuthUrl();
 header('Location: ' . filter_var($auth_url, FILTER_SANITIZE_URL));
 exit();

En supposant qu'un code d'authentification valide est retourné à la redirect_url, ce qui suit générera un jeton à partir du code d'authentification ainsi que fournira des informations de profil de base:

 //en supposant qu'un code d'authentification réussi est retourné
 $authentication_code = 'code-retourné-par-google';
 $client = new Google_Client();
 //.... code pour configurer l'objet $client va ici
 $client->authenticate($authentication_code);
 $token_data = $client->getAccessToken();

 //obtenir l'adresse e-mail de l'utilisateur
 $google_oauth =new Google_Service_Oauth2($client);
 $google_account_email = $google_oauth->userinfo->get()->email;
 //$google_oauth->userinfo->get()->familyName;
 //$google_oauth->userinfo->get()->givenName;
 //$google_oauth->userinfo->get()->name;
 //$google_oauth->userinfo->get()->gender;
 //$google_oauth->userinfo->get()->picture; //photo de profil

Cependant, la localisation n'est pas retournée. Les nouveaux comptes YouTube n'ont pas de noms d'utilisateur spécifiques à YouTube

0 votes

Comment obtenir l'emplacement ?

0 votes

Je ne peux pas obtenir les informations sur le sexe (j'ai conservé les informations sur le sexe public) en utilisant cette portée. J'ai essayé l'aire de jeux OAuth developers.google.com/oauthplayground pour cela. Je veux le faire en utilisant l'API REST côté serveur. Pouvez-vous m'aider sur cela?

0 votes

Ne peut pas obtenir le genre non plus. Et sur certains comptes, rien d'autre que l'email n'est retourné. Des idées?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X