无法获取用户信息

时间:2018-03-28 12:02:32

标签: node.js google-api google-plus google-people userinfo

bellow是我的节点js脚本,用于使用accessToken获取谷歌用户详细信息

 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登录用户详细信息。代码有什么问题?

2 个答案:

答案 0 :(得分:1)

最可能的原因是相关用户尚未创建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 people api

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

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

答案 1 :(得分:1)

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

但在请求用户数据之前,请确保您已通过为其提供所需范围来授权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 API