问题:
我正在创建简单的仅后端应用程序,它将检查我的Google日历帐户中的某些内容。我希望它每周运行一次api调用。
日历api需要使用oAuth2。我发现的所有示例都需要人与人之间的互动:
问题是我不想每周都这样做。我希望它进行一次身份验证,然后在无人看管的情况下运行。
一种方法是将令牌到期日期设置为1周以上,然后在每次调用时刷新它。但这在某些情况下(例如断电)无法恢复连接。
到目前为止我尝试过的是: 我显然开始here。可以,但是我必须使用浏览器。
然后我发现了google-auth-library-nodejs。但这默认为JWT,因此JWT无法与日历一起使用。也许我做错了:
private async initApiKey() {
const client = await auth.getClient();
const calendar = await google.calendar({version: 'v3', client});
const events = await calendar.events.list({
calendarId: 'primary',
timeMin: (new Date()).toISOString(),
maxResults: 10,
singleEvents: true,
orderBy: 'startTime',
});
return client;
}
google.calendar
应该传递给oauthclient,这里client
是JWTClient。我猜我可以强制使用oAuth,但它可以强制使用浏览器(甚至使用opn)。
该怎么做?
答案 0 :(得分:1)
如果要代表用户(甚至是您自己的用户)发出请求,则必须获取oauth令牌。
JWToken用于服务帐户,这些帐户不是实际用户,也没有日历。这些帐户代表Google Cloud Project或其他类型的对象执行API操作。
OAuth的目的是让用户明确同意允许由Google注册到应用程序的服务器代表他们进行API交互。您需要通过浏览器进行OAuth以获得令牌。刷新令牌可以在以后使用,以使该令牌保持最新状态。您可以存储这些令牌并在断电或其他重启事件后刷新。