【发布时间】:2022-01-16 23:52:00
【问题描述】:
我正在尝试将 google 日历集成到我的应用中,但收到 error: 'invalid_grant', error_description: 'Bad Request'
我一直在关注谷歌文档,并参考了相关的 StackOverflow 帖子来解决问题,但到目前为止还没有运气。我正在实施的流程如下:
-
生成谷歌同意网址
const {client_secret, client_id, redirect_uris} = credentials.web; const oAuth2Client = new google.auth.OAuth2( client_id, client_secret, redirect_uris[0] ); const authUrl = oAuth2Client.generateAuthUrl({ access_type: 'offline', scope: SCOPES, prompt: 'consent' }); console.log('Authorize this app by visiting this url:', authUrl); -
在征得用户同意后,从 URL 中提取授权码并尝试获取令牌以换取授权码
const { client_secret, client_id, redirect_uris } = credentials.web; const OAuthtoClient = new google.auth.OAuth2( client_id, client_secret, redirect_uris[0] ); let decoded = decodeURIComponent(code); OAuthtoClient.getToken(decoded, (err, token) => { if (err) return console.error('Error retrieving access token', err); console.log('Here the tokens :', token);
首先我遇到了另一个错误{ "error": "invalid_grant", "error_description": "Malformed auth code。" },参考this solution解决。代码运行一次,我第一次能够生成“refresh_token and access_token”。
之后我尝试为另一个用户生成令牌,但出现以下错误error: 'invalid_grant', error_description: 'Bad Request'
我尝试了诸如重置客户端密码之类的方法,但没有成功。
我的重定向网址是 "redirect_uris": [ "https://example.com/authenticate-gcalendar", "http://localhost:3000" ]
来源网址"javascript_origins": [ "http://localhost:4000" ]
作用域const SCOPES = ['https://www.googleapis.com/auth/calendar', 'https://www.googleapis.com/auth/calendar.events'];
提前谢谢你!
这是完整的错误信息
Error retrieving access token GaxiosError: invalid_grant
at Gaxios.<anonymous> (F:\Git Clones\user-module\node_modules\gaxios\build\src\gaxios.js:73:27)
at Generator.next (<anonymous>)
at fulfilled (F:\Git Clones\user-module\node_modules\gaxios\build\src\gaxios.js:16:58)
at processTicksAndRejections (node:internal/process/task_queues:96:5) {
response: {
config: {
method: 'POST',
url: 'https://oauth2.googleapis.com/token',
data: 'code=4%2F0AX4XfWiJdQtBAPFLwGHm6O5fotnjqYqHUSYzgUhvFpYyeQ7CziXcd_rc1f5bKMYJaJpklg&client_id&client_secret&redirect_uri=https%3A%2F%2Fexample.com%2Fauthenticate-gcalendar&grant_type=authorization_code&code_verifier=',
headers: [Object],
params: [Object: null prototype] {},
paramsSerializer: [Function: paramsSerializer],
body: 'code=4%2F0AX4XfWiJdQtBAPFLwGHm6O5fotnjqYqHUSYzgUhvFpYyeQ7CziXcd_rc1f5bKMYJaJpklg&client_id&client_secret&redirect_uri=https%3A%2F%2Fexample.com%2Fauthenticate-gcalendar&grant_type=authorization_code&code_verifier=',
validateStatus: [Function: validateStatus],
responseType: 'json'
},
data: { error: 'invalid_grant', error_description: 'Bad Request' },
headers: {
'alt-svc': 'h3=":443"; ma=2592000,h3-29=":443"; ma=2592000,h3-Q050=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000,quic=":443"; ma=2592000; v="46,43"',
'cache-control': 'no-cache, no-store, max-age=0, must-revalidate',
connection: 'close',
'content-encoding': 'gzip',
'content-type': 'application/json; charset=utf-8',
date: 'Mon, 13 Dec 2021 13:01:12 GMT',
expires: 'Mon, 01 Jan 1990 00:00:00 GMT',
pragma: 'no-cache',
server: 'scaffolding on HTTPServer2',
'transfer-encoding': 'chunked',
vary: 'Origin, X-Origin, Referer',
'x-content-type-options': 'nosniff',
'x-frame-options': 'SAMEORIGIN',
'x-xss-protection': '0'
},
status: 400,
statusText: 'Bad Request'
},
config: {
method: 'POST',
url: 'https://oauth2.googleapis.com/token',
data: 'code=4%2F0AX4XfWiJdQtBAPFLwGHm6O5fotnjqYqHUSYzgUhvFpYyeQ7CziXcd_rc1f5bKMYJaJpklg&client_id&client_secret&redirect_uri=https%3A%2F%2Fexample.com%2Fauthenticate-gcalendar&grant_type=authorization_code&code_verifier=',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
'User-Agent': 'google-api-nodejs-client/3.1.2',
Accept: 'application/json'
},
params: [Object: null prototype] {},
paramsSerializer: [Function: paramsSerializer],
body: 'code=4%2F0AX4XfWiJdQtBAPFLwGHm6O5fotnjqYqHUSYzgUhvFpYyeQ7CziXcd_rc1f5bKMYJaJpklg&client_id&client_secret&redirect_uri=https%3A%2F%2Fexample.com%2Fauthenticate-gcalendar&grant_type=authorization_code&code_verifier=',
validateStatus: [Function: validateStatus],
responseType: 'json'
},
code: '400'
【问题讨论】:
标签: node.js google-api google-oauth google-calendar-api google-api-nodejs-client