Получить информацию о пользователе через Google API - PullRequest
87 голосов
/ 20 августа 2011

Можно ли получить информацию из профиля пользователя через Google API? Если это возможно, какой API я должен использовать?

Мне интересна такая информация:

Также было бы здорово получить другую информацию из профиля пользователя.

Ответы [ 7 ]

106 голосов
/ 21 августа 2011

Добавьте это к объему - https://www.googleapis.com/auth/userinfo.profile

А после авторизации, получить информацию от - https://www.googleapis.com/oauth2/v1/userinfo?alt=json

В нем есть множество вещей, включая имя, URL публичного профиля, пол, фото и т. Д.

81 голосов
/ 14 ноября 2011

объем - 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'];
26 голосов
/ 17 марта 2014

Эта область действия 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/{userId} -userId может быть просто «я» для текущего пользователя.

24 голосов
/ 10 июня 2015

Я использую 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

5 голосов
/ 01 июля 2014

Я использую Google API для .Net, но, без сомнения, вы можете найти такой же способ получения этой информации, используя другую версию API.Как упоминалось user872858 , область действия userinfo.profile устарела ( google article ).

Для получения информации профиля пользователя я использую следующий код (переписанная часть из примера 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();
                    }

Чем вы можете получить доступ практически ко всему, используя userProfile.

ОБНОВЛЕНИЕ: Чтобы заставить этот код работать, вам нужноиспользуйте соответствующие области на кнопке входа в 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>
1 голос
/ 02 ноября 2015

Если вы находитесь в веб-среде на стороне клиента, новый API-интерфейс auth2 javascript содержит крайне необходимую функцию getBasicProfile(), которая возвращает имя пользователя, адрес электронной почты и URL-адрес изображения.

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

0 голосов
/ 06 апреля 2019

Необходимо выполнить 3 шага.

  1. Зарегистрировать идентификатор клиента вашего приложения в консоли API Google
  2. Попросите вашего конечного пользователя дать согласие, используя этот API https://developers.google.com/identity/protocols/OpenIDConnect#sendauthrequest
  3. Используйте API Google oauth2, как описано в https://any -api.com / googleapis_com / oauth2 / docs / userinfo / oauth2_userinfo_v2_me_get с использованием токена, полученного на шаге 2. (Хотя до сих пор я не могнайдите, как правильно заполнить параметр «fields»).

Очень интересно, что это простейшее использование нигде четко не описано.И я считаю, есть опасность, вы должны обратить внимание на параметр verified_email, приходящий в ответ.Потому что если я не ошибаюсь это может привести к поддельным электронным письмам при регистрации вашей заявки.(Это всего лишь моя интерпретация, есть большая вероятность, что я могу ошибаться!)

Я считаю, что механика OAuth в Facebook гораздо более четко описана.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...