无法使用Node JS中的Google令牌进行身份验证

时间:2016-05-09 20:15:08

标签: node.js oauth-2.0 google-signin google-oauth2 googlesigninapi

在节点服务器上,我正在尝试验证Google用户,但它始终返回“错误请求”。我的代码出了什么问题?

var post_data = querystring.stringify({
    'alt': 'json',
    'access_token': <token from REST API params>
});

var post_options = {
    host: 'www.googleapis.com',
    port: '443',
    path: '/oauth2/v1/userinfo',
    method: 'GET',
    headers: {
        'Content-Length': Buffer.byteLength(post_data)
    }
};

var post_req = https.request(post_options, function (result) {
    if (result.statusCode == 200) {
        result.on('data', function (chunk) {
            //Valid user stuff
        });
    }
    else {
        //Invalid user stuff
    }
});

post_req.write(post_data);
post_req.end();

此处的方案是我的客户端应用是Chrome扩展程序,可成功获取令牌。令牌传递给我在节点服务器上托管的REST API。我尝试重播该令牌以验证Google用户身份。 (请注意,如果我使用Chrome扩展程序上的令牌发出相同的请求,它会成功,我会收到配置文件信息!这只是节点服务器上的请求失败。)帮助我!请?

1 个答案:

答案 0 :(得分:0)

问题是你是:

  • 使用属性host代替hostname
  • 提供port参数(不确定此参数,但没有它可以正常工作)
  • 方法应为POST,而不是GET

所以,你的新post_options对象应该是:

var post_options = {
    hostname: 'www.googleapis.com',
    path: '/oauth2/v1/userinfo',
    method: 'POST',
    headers: {
        'Content-Length': Buffer.byteLength(post_data)
    }
};

如果您想让自己更轻松,可以使用google-auth-librarygoogle-sign-in等模块。