Reputation: 43491
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
Reputation: 201378
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.
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
});
oauth2Client
and googleCalendar
are declared.If I misunderstood your question and this was not the result you want, I apologize.
Upvotes: 1