web-dev-qa-db-fra.com

Obtenir des informations sur l'utilisateur via Google API

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

Je suis intéressant pour de telles informations:

En outre, il serait intéressant d’obtenir d’autres informations à partir du profil de l’utilisateur.

89
glagola

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

Et après l’autorisation, obtenez les informations auprès de - https://www.googleapis.com/oauth2/v1/userinfo?alt=json

Il contient beaucoup de choses - y compris nom, URL de profil public, sexe, photo, etc.

106
Abhinav Manchanda

scope - https://www.googleapis.com/auth/userinfo.profile

return youraccess_token = access_token

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

vous obtiendrez 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 php.
Vous pouvez utiliser la fonction json_decode pour obtenir le 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'];
82
eason

Cette étendue https://www.googleapis.com/auth/userinfo.profile est désormais obsolète. Veuillez regarder https://developers.google.com/+/api/auth-migration#timetable .

La nouvelle portée que vous utiliserez pour obtenir les 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 "moi" pour l'utilisateur actuellement connecté.

26
user872858

J'utilise PHP et j'ai résolu ce problème en utilisant la version 1.1.4 de google-api-php-client

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

 $client = new Google_Client();
 $client->setAuthConfigFile('/path/to/config/file/here');
 $client->setRedirectUri('https://redirect/url/here');
 $client->setAccessType('offline'); //optional
 $client->setScopes(['profile']); //or email
 $auth_url = $client->createAuthUrl();
 header('Location: ' . filter_var($auth_url, FILTER_SANITIZE_URL));
 exit();

En supposant qu'un code d'authentification valide soit renvoyé au redirect_url, les éléments suivants vont générer un jeton à partir du code d'authentification et fournir des informations de base sur le profil:

 //assuming a successful authentication code is return
 $authentication_code = 'code-returned-by-google';
 $client = new Google_Client();
 //.... configure $client object code goes here
 $client->authenticate($authentication_code);
 $token_data = $client->getAccessToken();

 //get user email address
 $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; //profile picture

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

24
singh1469

J'utilise Google API pour .Net, mais vous pouvez certainement trouver le même moyen d'obtenir ces informations à l'aide d'une autre version de l'API. Comme mentionné user872858 , scope userinfo.profile est déconseillé ( article de Google =).

Pour obtenir des informations sur le profil de l'utilisateur, j'utilise le code suivant (partie réécrite de exemple de Google ):

IAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow(
                                  new GoogleAuthorizationCodeFlow.Initializer
                                      {
                                            ClientSecrets = Secrets,
                                            Scopes = new[] { PlusService.Scope.PlusLogin,"https://www.googleapis.com/auth/plus.profile.emails.read"  }
                                       });    
TokenResponse _token = flow.ExchangeCodeForTokenAsync("", code, "postmessage", 
                              CancellationToken.None).Result;

                    // Create an authorization state from the returned token.
                    context.Session["authState"] = _token;

                    // Get tokeninfo for the access token if you want to verify.
                    Oauth2Service service = new Oauth2Service(
                     new Google.Apis.Services.BaseClientService.Initializer());
                    Oauth2Service.TokeninfoRequest request = service.Tokeninfo();
                    request.AccessToken = _token.AccessToken;
                    Tokeninfo info = request.Execute();
                    if (info.VerifiedEmail.HasValue && info.VerifiedEmail.Value)
                    {
                        flow = new GoogleAuthorizationCodeFlow(
                                    new GoogleAuthorizationCodeFlow.Initializer
                                         {
                                             ClientSecrets = Secrets,
                                             Scopes = new[] { PlusService.Scope.PlusLogin }
                                          });

                        UserCredential credential = new UserCredential(flow, 
                                                              "me", _token);
                        _token = credential.Token;
                        _ps = new PlusService(
                              new Google.Apis.Services.BaseClientService.Initializer()
                               {
                                   ApplicationName = "Your app name",
                                   HttpClientInitializer = credential
                               });
                        Person userProfile = _ps.People.Get("me").Execute();
                    }

Ensuite, vous pouvez accéder à presque tout en utilisant userProfile.

MISE À JOUR: pour que ce code fonctionne, vous devez utiliser les étendues appropriées sur le bouton de connexion de Google. Par exemple mon bouton:

     <button class="g-signin"
             data-scope="https://www.googleapis.com/auth/plus.login https://www.googleapis.com/auth/plus.profile.emails.read"
             data-clientid="646361778467-nb2uipj05c4adlk0vo66k96bv8inqles.apps.googleusercontent.com"
             data-accesstype="offline"
             data-redirecturi="postmessage"
             data-theme="dark"
             data-callback="onSignInCallback"
             data-cookiepolicy="single_Host_Origin"
             data-width="iconOnly">
     </button>
5
LaoR

Si vous vous trouvez dans un environnement Web côté client, la nouvelle API javascript auth2 contient une fonction très nécessaire getBasicProfile(), qui renvoie le nom, l'adresse e-mail et l'URL de l'utilisateur.

https://developers.google.com/identity/sign-in/web/reference#googleusergetbasicprofile

1
alalonde

Il y a 3 étapes à exécuter.

  1. Enregistrez l'ID client de votre application depuis la console Google API
  2. Demandez à votre utilisateur final de donner son consentement à l'aide de cette API https://developers.google.com/identity/protocols/OpenIDConnect#sendauthrequest
  3. Utilisez l'API oauth2 de Google, comme décrit à la section https://any-api.com/googleapis_com/oauth2/docs/userinfo/oauth2_userinfo_v2_me_get à l'aide du jeton obtenu à l'étape 2. (Je n'ai toujours pas trouvé comment remplir "paramètre" correctement).

Il est très intéressant que cette utilisation la plus simple ne soit décrite clairement nulle part. Et je crois qu'il y a un danger, vous devriez faire attention au paramètre verified_email qui apparaît dans la réponse. Parce que si je ne me trompe pas , il se peut que de faux courriels fassent enregistrer votre demande. (Ceci est juste mon interprétation, a de bonnes chances que je me trompe!)

Je trouve que la mécanique de OAuth de facebook est très bien décrite.

1
Mehmet Kaplan