我正在尝试将谷歌帐户登录集成到我正在构建的node.js应用程序中,并且我在向谷歌api gate发送https post请求时遇到了一个小问题。
起初,我遵循了这个教程,它运行良好,但他们在其中指出,对于谷歌帐户id的后端处理,应该执行这个教程。从那时起我就开始有问题了。我不想使用任何额外的库,只想使用本机node.js功能来了解它是如何实现的。
为了在后台验证帐户,需要将o令牌id安全地发布到给定的url。
这是正在工作的客户端代码:
var xhr = new XMLHttpRequest();
xhr.open('POST', 'https://www.googleapis.com/oauth2/v3/tokeninfo');
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
xhr.onload = function() {
console.log(xhr.responseText);
};
xhr.send('id_token=' + token_id);
现在,当我尝试在服务器端使用nodejs时,它不起作用。我尝试了在nodejs文档中找到的代码:
var http = require('http');
var post_data = 'id_token=' + token_id;
var post_options = {
host: 'googleapis.com',
port: '80',
path: '/oauth2/v3/tokeninfo',
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
}
};
var post_req = http.request(post_options, function(res) {
res.setEncoding('utf8');
res.on('data', function (chunk) {
console.log(chunk);
});
});
post_req.write(post_data);
post_req.end();
谷歌的回复是404错误The requested URL /oauth2/v3/tokeninfo was not found on this server. That's all we know.
,这意味着我做错了什么。所以我的问题是:
- 如何改进/修复我的代码,使其执行正确的post-https请求
- 我怎么知道这将是一个https请求(而不是http(
感谢您的帮助;(
除了协议上的差异(http和https(之外,主机名中还缺少www
子域(就像客户端示例中使用的一样(。将其从host: 'googleapis.com'
更改为host: 'www.googleapis.com'
应该可以。