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.
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.
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'];
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é.
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
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>
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
Il y a 3 étapes à exécuter.
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.