googleapis / googleapis/google-api-nodejs-client

Periodic GaxiosError: invalid_grant on gmail API

Aperta
#3,011 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub
priority: p3 type: question
Lingua principale
TypeScript
Stelle
12.2k
Fork
2k
Merge medio
1g 9h
PR unite (30g)
24

Descrizione

Hiya, I have a node server running some automatic email parsing. About once a week the server will crash returning and invalid_grant error from the following code:

authorize(cred, callback){
const {client_secret, client_id, redirect_uris} = cred.installed;
const oAuth2Client = new google.auth.OAuth2(client_id, client_secret, redirect_uris[0]);
fs.readFile(process.env.TOKEN_PATH, (err, token) => {
var now = new Date().getTime();
if (err) return this.getNewToken(oAuth2Client, callback);
oAuth2Client.setCredentials(JSON.parse(token));
callback(oAuth2Client);
});
}

I am then required to delete my access/refresh token and obtain a new one from the API before I can begin processing emails. I'm not particularly versed in reading HTTP errors (yet) so I can't work out if the error is complaining about the refresh token or providing a new one. The full error is below:

GaxiosError: invalid_grant
0|ttb | at Gaxios._request (/root/ttb/ttb/node_modules/gaxios/build/src/gaxios.js:130:23)
0|ttb | at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
0|ttb | at async OAuth2Client.refreshTokenNoCache (/root/ttb/ttb/node_modules/google-auth-library/build/src/auth/oauth2client.js:174:21)
0|ttb | at async OAuth2Client.getRequestMetadataAsync (/root/ttb/ttb/node_modules/google-auth-library/build/src/auth/oauth2client.js:284:17)
0|ttb | at async OAuth2Client.requestAsync (/root/ttb/ttb/node_modules/google-auth-library/build/src/auth/oauth2client.js:357:23)
0|ttb | at async email_parser.parseMessages (/root/ttb/ttb/app/email.js:179:15) {
0|ttb | response: {
0|ttb | config: {
0|ttb | method: 'POST',
0|ttb | url: 'https://oauth2.googleapis.com/token',
0|ttb | data: 'refresh_token=REDACTED&grant_type=refresh_token',
0|ttb | headers: [Object],
0|ttb | paramsSerializer: [Function: paramsSerializer],
0|ttb | body: 'refresh_token=REDACTED&grant_type=refresh_token',
0|ttb | validateStatus: [Function: validateStatus],
0|ttb | responseType: 'json'
0|ttb | },
0|ttb | data: {
0|ttb | error: 'invalid_grant',
0|ttb | error_description: 'Token has been expired or revoked.'
0|ttb | },
0|ttb | headers: {
0|ttb | '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"',
0|ttb | 'cache-control': 'no-cache, no-store, max-age=0, must-revalidate',
0|ttb | connection: 'close',
0|ttb | 'content-encoding': 'gzip',
0|ttb | 'content-type': 'application/json; charset=utf-8',
0|ttb | date: 'Thu, 23 Jun 2022 19:22:45 GMT',
0|ttb | expires: 'Mon, 01 Jan 1990 00:00:00 GMT',
0|ttb | pragma: 'no-cache',
0|ttb | server: 'scaffolding on HTTPServer2',
0|ttb | 'transfer-encoding': 'chunked',
0|ttb | vary: 'Origin, X-Origin, Referer',
0|ttb | 'x-content-type-options': 'nosniff',
0|ttb | 'x-frame-options': 'SAMEORIGIN',
0|ttb | 'x-xss-protection': '0'
0|ttb | },
0|ttb | status: 400,
0|ttb | statusText: 'Bad Request',
0|ttb | request: { responseURL: 'https://oauth2.googleapis.com/token' }
0|ttb | },
0|ttb | config: {
0|ttb | method: 'POST',
0|ttb | url: 'https://oauth2.googleapis.com/token',
0|ttb | data: 'refresh_token=REDACTED&grant_type=refresh_token',
0|ttb | headers: {
0|ttb | 'Content-Type': 'application/x-www-form-urlencoded',
0|ttb | 'User-Agent': 'google-api-nodejs-client/8.0.2',
0|ttb | 'x-goog-api-client': 'gl-node/18.3.0 auth/8.0.2',
0|ttb | Accept: 'application/json'
0|ttb | },
0|ttb | paramsSerializer: [Function: paramsSerializer],
0|ttb | body: 'refresh_token=REDACTED&grant_type=refresh_token',
0|ttb | validateStatus: [Function: validateStatus],
0|ttb | responseType: 'json'
0|ttb | },
0|ttb | code: '400'
0|ttb | }

This is likely a user error on my part (improperly handling the refresh token or something I'm not sure. Any guidance available?

Guida per i contributori

Apri la guida per i contributori

Direzione di ricerca

Inizia da app/email.js:179 e dalla funzione authorize, quindi segui il flusso di refresh di OAuth2Client mostrato nell’errore. Determina se il problema riguarda la gestione dei token dell’applicazione o la libreria client; il lavoro sarà completo quando saranno disponibili una diagnosi riproducibile e una modifica chiaramente circoscritta oppure indicazioni documentate.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
google-cloud, javascript, nodejs
Ambito
api, authentication, backend
Tipo di issue
Bug
Difficoltà
3/5
Tempo stimato
1-2 giorni
Stato di attività
Ferma
Chiarezza
Da chiarire
Idoneità per principianti
20/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.