在节点服务器上,我正在尝试验证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扩展程序上的令牌发出相同的请求,它会成功,我会收到配置文件信息!这只是节点服务器上的请求失败。)帮助我!请?
答案 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-library或google-sign-in等模块。