在浏览器中,我正在做:
let { code } = await this.auth2.grantOfflineAccess();
然后我将该代码
保存在我的数据库中。
然后在服务器 (node.js) 上,我正在做:
const { tokens } = await oauth2Client.getToken(code)
oauth2Client.setCredentials(tokens)
let { data } = await googleCalendar.calendarList.list({
auth: oauth2Client
})
第一次,tokens
有一个refresh_token
。我也保存它。当我运行一次时,它工作正常。当我再次运行它时,它说 token 无效。不知何故,我必须使用 refresh_token
来获取新 token ,但我不知道如何操作。有人可以像我 5 岁一样解释一下吗?
谢谢
最佳答案
- 您已经拥有刷新 token 。
- 您想将 API 与由刷新 token 刷新的访问 token 一起使用。
- 您想使用 googleapis 和 Node.js 来实现这一点。
如果我的理解是正确的,这个答案怎么样?我认为你的问题的原因是授权码只能使用一次。因此需要使用刷新 token 检索访问 token 。在此答案中,访问 token 由刷新 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
和googleCalendar
。 - 使用刷新 token 时,不需要授权码。
引用:
如果我误解了您的问题并且这不是您想要的结果,我深表歉意。
关于javascript - 有人可以 ELI5 如何使用 node.js 正确地进行离线 Google oauth2 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57809748/