23

我正在测试通过谷歌访问令牌获取用户信息

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"
}

现在我需要知道如何提取用户名、地址和电子邮件,有什么帮助吗?

提前致谢

4

9 回答 9

21

试试这个:

 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');

    }
  });
于 2015-07-16T14:47:29.120 回答
18

您可以使用此 api 在您的服务器上进行 google 登录后验证收到的身份验证令牌

要求

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

回复

{

  "email_verified": "true",
  "email": "abhinav.xxx@gmail.com",
  "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",
  ...
  ...
}

资源

于 2016-09-10T06:33:45.527 回答
15

我遇到过同样的问题。我想提取用户信息。但无法获得准确的链接。然后我浏览了Passport Google Strategy的代码Line number 54

我的范围是['profile', 'email']

获取请求

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": "john.doe@gmail.com",
  "email_verified": true,
  "locale": "en"
}
于 2020-03-03T11:59:07.010 回答
3

您需要使用访问令牌(您在重定向 url 中获得)来访问 Google 的 People API。在这里查看规格。

您可能会发现Google 的 OAuth2 Playground对于了解如何使用访问令牌访问 Google 的 API 非常有用。

祝你好运!

于 2013-05-13T03:35:10.740 回答
3

如果您想要 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-...

令牌信息响应

{
    "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": ""
}

用户信息响应

{
    "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',
};
于 2020-10-21T22:19:12.500 回答
2

检查这个。演示中有示例

代码片段:

$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;
于 2014-11-08T21:14:37.840 回答
1

您可以使用快速入门并在此处查看示例:示例
这里是People:get的描述

于 2015-02-04T16:17:36.720 回答
1

这是服务器端的简单 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);

           });




        });
  });                       
于 2017-01-02T10:57:56.610 回答
0

如果您使用 PHP

你可以在这里查看。简而言之,您要查找的代码是这样的

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

只要您添加所需的范围,这里的有效负载就有您需要的信息。

于 2018-10-06T22:30:11.017 回答