【发布时间】:2021-12-21 13:18:59
【问题描述】:
如何检查 Google Api 访问令牌是否已过期?
使用Nodejs Google Api Client 并在登录时成功获取刷新和访问令牌。但是,当访问令牌在 1 小时后过期时,我遇到了问题。
我创建了一个函数,用于检查令牌是否在每次 api 调用时过期。这一直有效,直到令牌过期,在这种情况下它会引发错误:
const tokenInfo = await oauth2Client.getTokenInfo(req.params.accessToken);
该库有一个应该自动刷新令牌的功能。但是,它不适用于我的实现。
本质上,我只是在寻找一个在令牌过期时返回布尔值 true/false 的函数,然后我可以从那里处理所有事情。有什么办法可以设置吗?感谢您的帮助!
router.get("/api/tokenrefresh/:userId/:accessToken", async function (req, res) {
//Library auto-refresh function. Nothing ever console logs.
oauth2Client.on("tokens", (tokens) => {
if (tokens.refresh_token) {
console.log(tokens.refresh_token);
}
console.log(tokens.access_token);
req.params.accessToken = tokens.access_token
res.json({
refreshNeeded: true,
token: tokens.access_token,
});
});
//my logic to check status of token. Works until token expires then throws error
const tokenInfo = await oauth2Client.getTokenInfo(req.params.accessToken);
console.log(tokenInfo.expiry_date);
console.log(Date.now());
console.log('DIFFERENT IN TIMES', tokenInfo.expiry_date - Date.now());
res.json({
refreshNeeded: false,
});
【问题讨论】:
-
Google Api 访问令牌
-
我想到了这一点,但担心是否由于令牌过期以外的原因引发错误。除非(现在我正在大声思考),将这个函数包装在一个 try catch 中,例如:
try { const tokenInfo = await oauth2Client.getTokenInfo(req.params.accessToken); } catch(error) {//refresh the token}编辑:我将对其进行测试。我认为这可能会做到。
标签: javascript node.js reactjs google-cloud-platform google-api