question-mark
Stuck on an issue?

Lightrun Answers was designed to reduce the constant googling that comes with debugging 3rd party libraries. It collects links to all the places you might be looking at while hunting down a tough bug.

And, if you’re still stuck at the end, we’re happy to hop on a call to see how we can help out.

Access token not getting refreshed automatically

See original GitHub issue

According to Google node sdk docs: “This library will automatically use a refresh token to obtain a new access token if it is about to expire.”. But it’s not happening in my case. After an hour or so I’m getting 400 invalid_request error.

Here’s my implementation:

import { calendar_v3, google } from "googleapis";

const oauth2Client = new google.auth.OAuth2(
      process.env.NEXT_PUBLIC_GOOGLE_CLIENT_ID,
      process.env.GOOGLE_CLIENT_SECRET,
      process.env.NEXT_PUBLIC_GOOGLE_REDIRECT_URI
    );
    oauth2Client.setCredentials({
      refresh_token: gRefToken,
      access_token: gAccToken,
    });

const calendar = google.calendar({
      version: "v3",
      auth: oauth2Client,
    });

resCalEventsFromLastSync = await calendar.events.list({
        calendarId: "primary",
        timeMin: new Date().toISOString(),
        timeMax,
        singleEvents: true,
      });

PS: My app is currently in unverified state but note sure if that has something to do with it.

Environment details

  • OS: Windows 10
  • Node.js version: 14
  • npm version: 6.14
  • googleapis version: ^81.0.0

Issue Analytics

  • State:closed
  • Created 2 years ago
  • Comments:5 (1 by maintainers)

github_iconTop GitHub Comments

1reaction
GorvGoylcommented, Jul 15, 2021

I feel stupid. turned out env variables were missing. it’s all sorted now.

0reactions
GorvGoylcommented, Jul 14, 2021

Full Error I’m getting:

{
  "response": {
    "config": {
      "method": "POST",
      "url": "https://oauth2.googleapis.com/token",
      "data": "refresh_token=1T_09_wb9D3W_pgWgPbAKMcmOYCw3EOurrXyE4v7u7lHHRTS7wUANIxa2A&client_id=&client_secret=&grant_type=refresh_token",
      "headers": {
        "Content-Type": "application/x-www-form-urlencoded",
        "User-Agent": "google-api-nodejs-client/7.3.0",
        "x-goog-api-client": "gl-node/14.17.0 auth/7.3.0",
        "Accept": "application/json"
      },
      "body": "refresh_token=1T_09_wb9D3W_pgWgPbAKMcmOYCw3EOurrXyE4v7u7lHHRTS7wUANIxa2A&client_id=&client_secret=&grant_type=refresh_token",
      "responseType": "json"
    },
    "data": {
      "error": "invalid_request",
      "error_description": "Could not determine client ID from request."
    },
    "headers": {
      "alt-svc": "h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000,h3-T051=\":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": "Wed, 14 Jul 2021 21:29:59 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",
    "request": { "responseURL": "https://oauth2.googleapis.com/token" }
  },
  "config": {
    "method": "POST",
    "url": "https://oauth2.googleapis.com/token",
    "data": "refresh_token=1%2F%9Ir67CtgIIoYZT_09_wb9D3W_pgWgPbAKMcmOYCw3EOurrXyE4v7u7lHHRTS7wUANIxa2A&client_id=&client_secret=&grant_type=refresh_token",
    "headers": {
      "Content-Type": "application/x-www-form-urlencoded",
      "User-Agent": "google-api-nodejs-client/7.3.0",
      "x-goog-api-client": "gl-node/14.17.0 auth/7.3.0",
      "Accept": "application/json"
    },
    "body": "refresh_token=1%2F%2F0gr67CtgIIoYZT_09_wb9D3W_pgWgPbAKMcmOYCw3EOurrXyE4v7u7lHHRTS7wUANIxa2A&client_id=&client_secret=&grant_type=refresh_token",
    "responseType": "json"
  },
  "code": "400"
}

Read more comments on GitHub >

github_iconTop Results From Across the Web

Auto refresh or Refresh Token not getting generated for ...
When a user approves the offline_access scope, your app can receive refresh tokens from the Microsoft identity platform token endpoint. Refresh tokens are...
Read more >
Access token not getting refreshed automatically Google node ...
According to Google node sdk docs: "This library will automatically use a refresh token to obtain a new access token ...
Read more >
Auth0 Token Refresh Does Not Automatically Refresh Azure ...
The Azure AD-issued access token in the User profile did not get refreshed. Below is how we set up our environment:.
Read more >
Solved: When to refresh an access token? - 391930
If that happens your API call will fail and you'll need to request authorization again to get new tokens. Refresh tokens expire after...
Read more >
Access token not beeing refreshed automatically
The first way looks correct, and that code is working for me when I supply valid credentials. Make sure you're supplying the correct...
Read more >

github_iconTop Related Medium Post

No results found

github_iconTop Related StackOverflow Question

No results found

github_iconTroubleshoot Live Code

Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start Free

github_iconTop Related Reddit Thread

No results found

github_iconTop Related Hackernoon Post

No results found

github_iconTop Related Tweet

No results found

github_iconTop Related Dev.to Post

No results found

github_iconTop Related Hashnode Post

No results found