Как получить профиль пользователя с помощью токена доступа Google

Я тестирую получение информации о пользователе с помощью токена доступа google

http://www.mawk3y.net/glogin

после нажатия кнопки входа я перенаправляюсь на

https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=access_token_here

И получите такие данные JSON

{
"issued_to": "my client id.apps.googleusercontent.com",
"audience": "my client id.apps.googleusercontent.com",
"user_id": "user id here",
"scope": "https://www.googleapis.com/auth/plus.login",
"expires_in": 3596,
"access_type": "online"
}

Теперь мне нужно знать, как извлечь имя пользователя, адрес и электронную почту, пожалуйста, за помощью?

заранее спасибо


person jq beginner    schedule 11.05.2013    source источник
comment
googleapis.com/oauth2/v3/userinfo?access_token= {access_token}   -  person mohammad    schedule 08.09.2020


Ответы (9)


Попробуй это:

 var url = 'https://www.googleapis.com/plus/v1/people/me?access_token={access_token}';

  $.ajax({
    type: 'GET',
    url: url,
    async: false,
    success: function(userInfo) {
      //info about user
      console.log(userInfo);
      console.log('test');
    },
    error: function(e) {
      console.log('error');

    }
  });
person betmakh    schedule 16.07.2015
comment
Спасибо, это сработало - person Jigar; 22.06.2016
comment
почему документация Google не показывает, что access_token должен быть в строке запроса? developers.google.com/+/web/api/rest/ последнее / люди / получить - person dman; 05.08.2018
comment
Да, это меня тоже немного растеряло. Они должны упомянуть об этом в обзоре остальных API, но я не смог найти в разделе Google Plus. Но я нашел вот это: developers.google.com/identity/protocols/ , в котором упоминается, что вы можете поместить его в URL-адрес или в заголовок авторизации. Но на самом деле это не связанные статьи. - person Jon F.; 15.01.2019
comment
Почему токен доступа находится в параметрах получения URL. Разве получение журналов на промежуточных переходах не представляет угрозы безопасности? - person Sanjeev Kumar Dangi; 27.02.2019
comment
устаревшая версия, V3 отсутствует - person mohammad; 08.09.2020

Вы можете проверить токен аутентификации, полученный после входа в Google на вашем сервере, используя этот API

Запрос

https://www.googleapis.com/oauth2/v3/tokeninfo?id_token={accces_token}

Ответ

{

  "email_verified": "true",
  "email": "[email protected]",
  "name": "abhinav srivastava",
  "picture": "https://lh3.googleusercontent.com/-xgD_zFj1EgY/AAAAAAAAAAI/AAAAAAAACZ0/fnecSQ03o0Y/s96-c/photo.jpg",
  "given_name": "abhinav",
  "family_name": "srivastava",
  "locale": "en",
  ...
  ...
}

источник

person HimalayanCoder    schedule 10.09.2016
comment
Вышеупомянутый запрос предназначен для id_token, а не для access_token - person Armand; 26.03.2019

Я была такая же проблема. Я хотел извлечь информацию о пользователе. Но не смог найти точную ссылку для попадания. Затем я просмотрел код для Passport стратегии Google на Line number 54.

Мои прицелы были ['profile', 'email']

GET запрос

https://www.googleapis.com/oauth2/v3/userinfo?access_token={access_token}

Ответ

{
  "sub": "23423....",
  "name": "John Doe",
  "given_name": "John",
  "family_name": "Doe",
  "picture": "<Profile picture URL>",
  "email": "[email protected]",
  "email_verified": true,
  "locale": "en"
}
person Asutosh Panda    schedule 03.03.2020
comment
@RajatAggarwal Мне не удалось найти этот URL в документации Google. Так что на это у меня ушло так много времени. В конечном итоге кодовая база Passport JS немного помогла. - person Asutosh Panda; 10.10.2020

Вам необходимо использовать токен доступа (вы получаете его в URL-адресе перенаправления) для доступа к Google People API. Ознакомьтесь со спецификациями здесь.

Вы можете найти площадку Google OAuth2 очень полезной, чтобы понять, как использовать токены доступа для доступа к API Google. .

Удачи!

person Miguel Andres    schedule 13.05.2013
comment
я получаю эту ошибку {error: {errors: [{domain: usageLimits, cause: dailyLimitExceededUnreg, message: Daily Limit for Unauthenticated Use Exceeded. Для продолжения использования требуется регистрация., ExtendedHelp: code.google.com/apis/console}], код: 403, сообщение: Превышен дневной лимит использования без аутентификации. Для продолжения использования требуется регистрация. }} когда я создаю http переход по этому URL-адресу $ response = file_get_contents (googleapis.com/ plus / v1 / people / me); echo $ response; - person jq beginner; 14.05.2013
comment
и когда я использую этот код, $ response = file_get_contents (googleapis.com/plus/v1/people / МОЙ ИДЕНТИФИКАТОР ПОЛЬЗОВАТЕЛЯ ЗДЕСЬ? Fields = birthday% 2CcurrentLocation% 2CdisplayName% 2Cemails% 2Cgender% 2Cname & key = {МОЙ КЛЮЧ API ЗДЕСЬ}); echo $ response; я получаю эту ошибку {error: {errors: [{domain: usageLimits, cause: keyInvalid, message: Bad Request}], code: 400, message: Bad Request}}, и я просто скопировал и вставил свой обновленный ключ API, так что я ' я уверен, что он активен - person jq beginner; 14.05.2013

Отметьте это. Есть пример с демо

Фрагмент кода:

$accountObj = call_api($_SESSION['accessToken'],"https://www.googleapis.com/oauth2/v1/userinfo");

call_api вызывает API и получает данные:

function call_api($accessToken,$url){
    $curl = curl_init($url);

    curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 
    $curlheader[0] = "Authorization: Bearer " . $accessToken;
    curl_setopt($curl, CURLOPT_HTTPHEADER, $curlheader);

    $json_response = curl_exec($curl);
    curl_close($curl);

    $responseObj = json_decode($json_response);

    return $responseObj;       
}

Из объекта учетной записи можно получить доступ к имени:

$your_name =  $accountObj->name;
person RealNmae    schedule 08.11.2014

Если вы хотите token_info, передайте tokeninfo в качестве параметра

https://www.googleapis.com/oauth2/v3/tokeninfo?access_token=ya29.a0AfH6SMArZZITzn-...

Если вам нужна вся информация о пользователе, передайте userinfo в качестве параметра

https://www.googleapis.com/oauth2/v3/userinfo?access_token=ya29.a0AfH6SMArZZITzn-...

ответ tokeninfo

{
    "azp": "",
    "aud": "",
    "sub": "",
    "scope": "https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.profile openid",
    "exp": "",
    "expires_in": "",
    "email": "",
    "email_verified": "",
    "access_type": ""
}

ответ userinfo

{
    "sub": "",
    "name": "",
    "given_name": "",
    "family_name": "",
    "picture": "",
    "email": "",
    "email_verified": ,
    "locale": ""
}

Не забудьте передать https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.profile в качестве области действия

var params = {
  'client_id': '',
  'redirect_uri': '',
  'response_type': 'token',
  'scope': 'https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.profile',
};
person Arunjith R S    schedule 21.10.2020

Вы можете воспользоваться быстрым стартом и увидеть образец здесь: образец
А вот описание People: get

person Reza Abbasi    schedule 04.02.2015

Это простой код nodejs на стороне сервера.

 var express = require('express');
 var appln = express();
 var google = require('googleapis');
 var plus = google.plus('v1');
 var OAuth = google.auth.OAuth2;
 var oauth2client = new OAuth(YOUR_CLIENT_ID  , YOUR_SECRET_ID ,  CALLBACK_REDIRECT_URI );

 appln.get("/tokens" , function(req , res ) {
         var code = req.query.code;
       oauth2client.getToken( code , function( err , tokens ){
                         if(err){
                            console.log(err);
                            res.send(err);
                            return;
                            }
                 oauth2client.setCredentials(tokens);
                 actoken = tokens.access_token;
                 reftoken = tokens.refresh_token;

       plus.people.get({  
                  userId: 'me',
                  auth: oauth2client
                  }, function (err, response) {
               // handle err and response
               var name = ""+response.displayName;
               var id =  ""+response.id;
               var age = ""+response.ageRange.min;
               if(err) console.log(err);
               console.log("Name : ", name," ",id,"",age);    
               res.send(response);

           });




        });
  });                       
person Taani    schedule 02.01.2017

ЕСЛИ ВЫ ИСПОЛЬЗУЕТЕ PHP

Вы можете проверить здесь. Короче говоря, код, который вы ищете, это

$payload = $client->verifyIdToken($id_token);

Здесь у полезной нагрузки есть необходимая информация, если вы добавляете необходимые области.

person NecipAllef    schedule 06.10.2018