Получить информацию о пользователе через Google API
можно ли получить информацию из профиля пользователя через Google API? Если это возможно, какой API я должен использовать?
Мне интересна такая информация:
- Url-адрес профиля пользователя (например,https://profiles.google.com/115063121183536852887);
- пол (sex);
- профиль фото.
также было бы здорово получить и другую информацию из профиля пользователя.
6 ответов:
добавьте это в область -https://www.googleapis.com/auth/userinfo.profile
и после авторизации, получить информацию от - https://www.googleapis.com/oauth2/v1/userinfo?alt=json
Он имеет множество вещей-в том числе имя, url-адрес общественного профиля, пол, фото и т. д.
scope -https://www.googleapis.com/auth/userinfo.profile
return youraccess_token = access_token
получить https://www.googleapis.com/oauth2/v1/userinfo?alt=json&access_token=youraccess_token
вы получите json:
{ "id": "xx", "name": "xx", "given_name": "xx", "family_name": "xx", "link": "xx", "picture": "xx", "gender": "xx", "locale": "xx" }
Тахиру Ясину:
Это пример php.
Вы можете использовать функцию json_decode для получения массива 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'];
эта область https://www.googleapis.com/auth/userinfo.profile теперь устарело. Пожалуйста, посмотрите на https://developers.google.com/+ / api / auth-migration#timetable.
новая область, которую вы будете использовать, чтобы получить информацию о профиле: профиль или https://www.googleapis.com/auth/plus.login
и конечная точка - https://www.googleapis.com/plus/v1/people/{id_пользователя} - имя пользователя может быть просто " я " для вошедшего в систему у пользователей.
Я использую
PHP
и решил это с помощью версии 1.1.4 из google-api-php-clientпредполагая, что следующий код используется для перенаправления пользователя на страницу аутентификации 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();
предполагая, что действительный код аутентификации возвращается к
redirect_url
, следующее сгенерирует маркер из кода аутентификации, а также предоставит основную информацию о профиле://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
однако местоположение не возвращается. новый Учетные записи YouTube не имеют конкретных имен пользователей YouTube
Я использую Google API для .Net, но, несомненно, вы можете найти тот же способ получить эту информацию, используя другую версию API. Как user872858 упоминалось, scope userinfo.профиль была прекращена ( статья google).
для получения информации о профиле пользователя я использую следующий код (переписанная часть от пример 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(); }
чем, вы можете получить доступ почти все, используя профиль_пользователя.
UPDATE: чтобы этот код работал, вы должны использовать соответствующие области на кнопке входа в google. Например моя кнопка:
<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>
Если вы находитесь в клиентской веб-среде, новый API auth2 javascript содержит столь необходимый
getBasicProfile()
функция, которая возвращает имя пользователя, адрес электронной почты и URL-адрес изображения.https://developers.google.com/identity/sign-in/web/reference#googleusergetbasicprofile