问题描述
我正在尝试构建一个API,该API要求每次收到请求时都要查看我的Google日历(而不是发送请求的用户的日历)。我的API应该能够响应用户的请求,而无需要求我一次又一次地进行身份验证。该API当前托管在Heroku上。
为此,我正在关注Quickstart项目。访问令牌存储在该项目的struct A<'a> {
borrow: &'a mut u8,}
/// We add the relation 'b: 'c
fn does_nothing<'b: 'c,'c>(a: &'b mut A<'c>) {
a.borrow = a.borrow;
}
文件中。我不了解该项目如何处理访问令牌的过期。在此快速入门项目中,我无法确定刷新访问令牌并将其重写为token.json
的地方。我们只会在第一次创建token.json
文件时写入它,此后再也不会写入。该项目到期后如何刷新访问令牌?
我也无法确定应该将token.json
文件存储在哪里。我尝试手动授权API,然后将获得的令牌作为环境变量存储在heroku上。昨天工作正常,但今天给出token.json
,我认为令牌已经过期。如何确保每次用户向HTTP发送API请求时,API都不需要我方的重复授权?
解决方法
您可以通过Google云端IAM和管理员创建服务帐户并生成service-key.json
文件:
screenshot of where IAM & Admin can be found
然后,您可以在代码中使用服务帐户进行授权:
import {google} from 'googleapis';
const initAuth = async () => {
const auth = new google.auth.GoogleAuth({
keyFile: './service-key.json',//path to service-key.json
scopes: ['https://www.googleapis.com/auth/drive'],//any auth scopes
});
const authClient = await auth.getClient();
google.options({auth: authClient});
};