如何在不使用google-api-nodejs-client的情况下处理Google API access_token已过期?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在不使用google-api-nodejs-client的情况下处理Google API access_token已过期?相关的知识,希望对你有一定的参考价值。
我已经实现了代码来获取access_token,refresh_token和expire_date。所有这些值都已存储在数据库中。
现在我需要一种方法来获取另一个access_token以防旧旧的过期而不使用google-api-nodejs-client包
原因是这个模块最近有bug,你可以在这里查看(我的评论是最新的)https://github.com/google/google-api-nodejs-client/issues/869#issuecomment-352401977 https://github.com/google/google-api-nodejs-client/issues/894。
此刻,我尝试过这样的事情
GoogleTokens.findOne({isObsolete: false}).then((token) => {
let subscriptionsGetUrl = "https://www.googleapis.com/androidpublisher/v2/applications/" + req.query.packageName + "/purchases/subscriptions/" + req.query.subscriptionId + "/tokens/" + req.query.token + "?access_token=" + token.accessToken;
request(subscriptionsGetUrl, function (error, response, body) {
if (error) {
throw error;
}
res.success(JSON.parse(body).expiryTimeMillis);
});
});
但是当access_token过期时它会失败。
谢谢。
这个答案怎么样?您可以使用OAuth2 API检索访问令牌的到期时间。如果要在没有google-api-nodejs-client的情况下检索它,可以使用以下方法。
示例脚本:
var uri = "https://www.googleapis.com/oauth2/v3/tokeninfo?access_token=" + accesstoken;
request.get({uri: uri}, (err, res, body) => {
console.log(body)
});
回应:
If the access token can be used yet, the following response is returned.
{
"azp": "#####",
"aud": "#####",
"sub": "#####",
"scope": "#####",
"exp": "1234567890", // Expiration time
"expires_in": "3600", // Remaining time
"access_type": "offline"
}
If the access token has already not been able to used, the following response is returned.
{
"error_description": "Invalid Value"
}
参考:
我从以下文件中得到了上述方法。
如果这对你没用,我很抱歉。
以上是关于如何在不使用google-api-nodejs-client的情况下处理Google API access_token已过期?的主要内容,如果未能解决你的问题,请参考以下文章
如何在不更改链接结构的情况下使用 \ 转义字符 (、)、[、]、*、_、:[]()
如何在不使用 sleep() 的情况下使用 ontimer 函数延迟进程?