如何在不使用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 函数延迟进程?

如何在不安装的情况下使用数据库?

如何在不使用 Flexbox 的情况下水平对齐元素?

如何在不使用 DESCRIBE 子句的情况下描述 ORACLE 包?

如何在不使用滤镜的情况下使图像变暗? [复制]