javascript - 有人可以 ELI5 如何使用 node.js 正确执行离线 Google oauth2 吗?
问题描述
在浏览器中,我正在做:
let { code } = await this.auth2.grantOfflineAccess();
然后我将其保存code
在我的数据库中。
然后在服务器(node.js)上,我正在做:
const { tokens } = await oauth2Client.getToken(code)
oauth2Client.setCredentials(tokens)
let { data } = await googleCalendar.calendarList.list({
auth: oauth2Client
})
第一次,tokens
有一个refresh_token
。我也保存了。当我运行一次时,它工作正常。当我再次运行它时,它说令牌无效。不知何故,我必须使用refresh_token
, 来获取新令牌,但我不知道如何。有人可以解释一下我5岁吗?
谢谢
解决方案
- 您已经拥有刷新令牌。
- 您希望将 API 与由刷新令牌刷新的访问令牌一起使用。
- 您想使用 googleapis 和 Node.js 来实现这一点。
如果我的理解是正确的,这个答案怎么样?我认为您的问题的原因是授权码只能使用一次。因此需要使用刷新令牌检索访问令牌。在此答案中,访问令牌由刷新令牌检索。
修改后的脚本:
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
声明了这一点。 - 使用刷新令牌时,不需要授权码。
参考:
如果我误解了您的问题并且这不是您想要的结果,我深表歉意。
推荐阅读
- swiftui - 在 SwiftUI 中实现 Box-Shadow
- java - 在 Anylogic 8.7 中如何调用存储在集合中的特定代理的属性?
- r - 如何引用函数中的列
- python - 在列中查找特定字符并将其与其他列合并
- multithreading - 屏障代码并等待所有线程到达集合点然后进入临界区
- javascript - 我可以将我所有的 html 文件放在一个 javascript const 中并用“HtmlService.createHtmlOutput().setContent(CONST_HTML)”显示它吗?
- go - 如何处理分块文件上传
- javascript - 如果我添加了多个元素,那么为什么要删除先前的元素(仅在计划 Javascript 中回答)
- c++ - 如何处理从 getter 方法返回的错误?
- python - Django分页器问题