javascript – 使用Node JS对Google API进行身份验证
作者:互联网
到目前为止,我的应用程序重定向到同意页面.用户接受,然后我使用有效的授权码重定向回localhost.根据我的理解,我需要进行另一次调用并将此代码交换为访问令牌.但是,getAccessToken()不起作用.控制台日志返回:
invalid_client
invalid_request
请告诉我需要哪些其他信息.
这是相关的代码:
var { google } = require('googleapis');
var http = require("http");
var request = require('request');
var oauth2Client = new google.auth.OAuth2(
'<My Client ID>',
'<My Client Secret>',
'http://localhost:8080'
);
exports.generateAuthCodeUrl = function () {
const url = oauth2Client.generateAuthUrl({
access_type: 'offline',
scope: 'https://www.googleapis.com/auth/blogger'
});
return url;
};
exports.getAccessToken = function (accessCode) {
var codeOptions = {
code: accessCode
}
oauth2Client.getToken(codeOptions, function (err, tokens) {
// Now tokens contains an access_token and an optional refresh_token. Save them.
if (!err) {
oauth2Client.setCredentials(tokens);
return tokens;
}
console.log(err.message);
});
};
编辑:摘要以及对我有用的内容
我从pinoyyid的答案TWICE中读到链接的文章,并且还注意到他的答案中列出的步骤.列出简单的步骤有助于我更清楚地理解.此外,根据评论中的建议,我删除了googleapi库(上面提到的错误发生在此库的代码中),并且只是使用请求库定期调用必要的端点.我使用了请求,因为它不那么冗长.我最终得到的代码如下所示:
exports.generateAuthCodeUrl = function () {
var authURL = "https://accounts.google.com/o/oauth2/v2/auth?" +
"client_id=" + client_id +
"&scope=" + scope +
"&redirect_uri=" + redirect_uri +
"&response_type=" + response_type;
//redirect to consent page
return authURL;
};
exports.getAccessToken = function (x) {
var postDataUrl = 'https://www.googleapis.com/oauth2/v4/token?' +
'code=' + x + //auth code received from the previous call
'&client_id=' + client_id +
'&client_secret=' + client_secret +
'&redirect_uri=' + redirect_uri +
'&grant_type=' + "authorization_code"
var options = {
uri: postDataUrl,
method: 'POST'
};
request(options, function (err, res, body) {
return body; //returns an object with an access token!!!
});
};
很高兴我得到了这个工作!非常感谢你们
解决方法:
Dummy的三脚Google OAuth指南.
从字面上看,您需要知道的一切都在这个单页https://developers.google.com/identity/protocols/OAuth2WebServer上.阅读两次,你将成为OAuth忍者.总之,它说……
>使用4个查询参数构建accounts.google.com网址: –
> client_id以识别您的应用
>范围说明您要求的权限
> redirect_uri告诉Google将用户浏览器的结果重定向到哪里
> response_type =代表你想要一个验证码
>将用户的浏览器重定向到该URL
>在用户登录时喝一口咖啡,选择他的Google帐户,并授予许可,直到最终……
>用户的浏览器被重定向回应用程序的redirect_uri,并带有一次代码查询参数,这是一次性验证码
>将验证码发布到Google的令牌端点
>解析JSON响应以获取访问令牌
>在“authorization:bearer access_token”http标头中使用访问令牌,以用于后续的Google API请求
如果您转到https://developers.google.com/oauthplayground/,则可以在线执行这些步骤,以查看各种URL和响应的外观.
标签:javascript,node-js,google-api,google-oauth 来源: https://codeday.me/bug/20191006/1861333.html