Shamoon
Shamoon

Reputation: 43491

Can someone ELI5 how to properly do offline Google oauth2 with node.js?

In the browser, I'm doing:

      let { code } = await this.auth2.grantOfflineAccess();

I then save that code in my DB.

Then on the server (node.js), I'm doing:

const { tokens } = await oauth2Client.getToken(code)
oauth2Client.setCredentials(tokens)
let { data } = await googleCalendar.calendarList.list({
  auth: oauth2Client
})

The first time, tokens has a refresh_token. I save that as well. When I run this once, it works fine. When I run it again, it says the token is invalid. Somehow, I have to use the refresh_token, to get a new token, but I don't know how. Can someone please explain like I'm 5?

Thanks

Upvotes: 1

Views: 121

Answers (1)

Tanaike
Tanaike

Reputation: 201378

  • You have already had the refresh token.
  • You want to use the API with the access token refreshed by the refresh token.
  • You want to achieve this using googleapis with Node.js.

If my understanding is correct, how about this answer? I think that the reason of your issue is that the authorization code can be used only one time. So it is required to retrieve the access token using the refresh token. In this answer, the access token is retrieved by the refresh token.

Modified script:

const refreshToken = "###";  // Please set your refresh token.

if (!refreshToken) { // Please modify this if statement for your situation.
  const { tokens } = await oauth2Client.getToken(code);
  oauth2Client.setCredentials(tokens);
} else {
  oauth2Client.credentials = { refresh_token: refreshToken };
}
let { data } = await googleCalendar.calendarList.list({
  auth: oauth2Client
});

Note:

  • This modified script supposes that oauth2Client and googleCalendar are declared.
  • When the refresh token is used, the authorization code is not required.

Reference:

If I misunderstood your question and this was not the result you want, I apologize.

Upvotes: 1

Related Questions