tienes - oauth login google
Obtener información del usuario a través de la API de Google (6)
¿Es posible obtener información del perfil del usuario a través de Google API? Si es posible, ¿qué API debería usar?
Estoy interesado en dicha información:
- URL al perfil del usuario (ej. https://profiles.google.com/115063121183536852887 );
- Género (sexo);
- Foto de perfil.
También sería genial obtener otra información del perfil del usuario.
Agregue esto al alcance - https://www.googleapis.com/auth/userinfo.profile
Y una vez que haya finalizado la autorización, obtenga la información de: https://www.googleapis.com/oauth2/v1/userinfo?alt=json
Tiene muchas cosas, como nombre, url de perfil público, género, foto, etc.
Este ámbito https://www.googleapis.com/auth/userinfo.profile ha quedado obsoleto ahora. Mire https://developers.google.com/+/api/auth-migration#timetable .
El nuevo ámbito que utilizará para obtener información de perfil es: profile o https://www.googleapis.com/auth/plus.login
y el punto final es - https://www.googleapis.com/plus/v1/people/ {userId} - userId puede ser solo ''me'' para el usuario actualmente conectado.
Estoy usando PHP
y lo solucioné usando la versión 1.1.4 de google-api-php-client
Suponiendo que se utiliza el siguiente código para redirigir a un usuario a la página de autenticación de 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();
Suponiendo que se devuelve un código de autenticación válido a redirect_url
, lo siguiente generará un token del código de autenticación y también proporcionará información básica del perfil:
//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
Sin embargo, la ubicación no se devuelve. Las nuevas cuentas de YouTube no tienen nombres de usuario específicos de YouTube
Estoy usando API de Google para .Net, pero sin duda puede encontrar la misma manera de obtener esta información usando otra versión de API. Como se menciona user872858 , el alcance userinfo.profile ha quedado obsoleto ( artículo de google ).
Para obtener información de perfil de usuario, utilizo el siguiente código (parte reescrita del ejemplo 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();
}
Entonces, puedes acceder a casi cualquier cosa usando userProfile.
ACTUALIZACIÓN: Para que este código funcione, debe usar los ámbitos adecuados en el botón de inicio de sesión de Google. Por ejemplo mi botón:
<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 se encuentra en un entorno web del lado del cliente, la nueva API de JavaScript de auth2 contiene una muy necesaria función getBasicProfile()
, que devuelve el nombre del usuario, el correo electrónico y la URL de la imagen.
https://developers.google.com/identity/sign-in/web/reference#googleusergetbasicprofile
alcance: https://www.googleapis.com/auth/userinfo.profile
return youraccess_token = access_token
obtener https://www.googleapis.com/oauth2/v1/userinfo?alt=json&access_token=youraccess_token
obtendrá json:
{
"id": "xx",
"name": "xx",
"given_name": "xx",
"family_name": "xx",
"link": "xx",
"picture": "xx",
"gender": "xx",
"locale": "xx"
}
Para Tahir Yasin:
Este es un ejemplo de php.
Puede usar la función json_decode para obtener la matriz 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''];