无法获取用户信息

not able to get user info

下面是我的节点 js 脚本,用于使用 accessToken

获取 google 用户详细信息
 var accessToken = req.body.accessToken;
            console.log(accessToken)


            var google = require('googleapis');
            //google api
            var plus = google.plus('v1');
            var OAuth2 = google.auth.OAuth2;

            var oauth2Client = new OAuth2(
                config.google.clientID,
                config.google.clientSecret,
                config.google.redirect_uri
            );
            oauth2Client.setCredentials({access_token: accessToken});
            plus.people.get({
                userId: 'me',
                auth: oauth2Client
            }, function (err, response) {
                // handle err and response
                if (err) {
                    reject(err)
                } else {
                    console.log(response);
                    resolve(response)
                }
            });

需要使用 accessToken 获取 google 登录用户详细信息。代码有什么问题?

最可能的原因是相关用户尚未创建 google+ 个人资料。这里还有几个选项。

我不确定您要获取哪些信息,但获取用户信息的最佳方式是使用个人资料范围对用户进行身份验证,然后直接从用户信息端点请求数据

请求

GET /userinfo/v2/me HTTP/1.1
Host: www.googleapis.com
Content-length: 0
Authorization: Bearer uzG4XqnvucBFk3jylgxnbtNhoOt2wCc3QvUcjk7PZhJ5m6G7ibtlBwbAQntJjJtLsxZfoDjhbASpzLmcFnlZ9o4qoMd2fCV2eRb4O5XrKRAXC

回应

{
  "family_name": "Lawton", 
  "name": "Linda Lawton", 
  "picture": "https://lh5.googleusercontent.com/-a1CWlFnA5xE/AAAAAAAAAAI/AAAAAAAAl1I/UcwPajZOuN4/photo.jpg", 
  "locale": "en", 
  "gender": "female", 
  "link": "https://plus.google.com/+LindaLawton", 
  "given_name": "Linda", 
  "id": "117200475532672775346"
}

您还可以使用相同的个人资料范围google 人 api

GET /v1/people/me HTTP/1.1
Host: people.googleapis.com
Content-length: 0
Authorization: Bearer NuzG4XqnvucBFk3jylgxnbtNhoOt2wCc3QvUcjk7PZhJ5m6G7ibtlBwbAQntJjJtLsxZfoDjhbASpzLmcFnlZ9o4qoMd2fCV2eRb4O5XrKRAXC

但此端点从 Google+ 读取,因此如果用户未在其 Google+ 个人资料中填写任何内容,您将不会在此处看到太多数据。

您可以使用 request 模块来获取节点服务器上的用户详细信息。


但在请求用户数据之前,请确保您已通过赋予所需范围授权 API。在您的情况下,您需要在范围内给出 https://www.googleapis.com/auth/userinfo.profile


收到 accessToken 后,使用该令牌调用此 google api

https://www.googleapis.com/oauth2/v1/userinfo 

const request = require('request');
// use any api you want to call.
request({
  url: 'https://www.googleapis.com/oauth2/v1/userinfo',
  method: 'GET',
  headers: {
    'Authorization': `Bearer ${YourAccessToken}`,
    'Accept': 'application/json'
  }
}, function(err, response, _user) {
  console.log('User Data', _user);
})


希望这能解决您的问题。如果仍然存在问题,您可以在 OAuth 2.0 Playground

上测试您的 Google APIs