node.js - node.js 如何处理不使用 Google API nodejs客户端的Google API access_token?

  显示原文与译文双语对照的内容
104 4

我已经实现了获取 access_token,refresh_token和expire_date的代码。所有这些值都存储在数据库中。

现在我需要一种方法来获取另一个 access_token,以防旧的没有使用google-api-nodejs-client包

原因是这个模块最近有 Bug,你可以在这里查看它的( 我的评论是最新的) https://github.com/google/google-api-nodejs-client/issues/869#issuecomment-352401977https://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过期时它将失效。

谢谢。

时间:原作者:0个回答

52 1

这个答案你可以使用 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)
});

响应:

如果还可以使用访问令牌,则返回以下响应。

{
"azp":"#####",
"aud":"#####",
"sub":"#####",
"scope":"#####",
"exp":"1234567890",//Expiration time
"expires_in":"3600",//Remaining time
"access_type":"offline"
}

如果访问令牌已经无法使用,则返回以下响应。

{
"error_description":"Invalid Value"
}

参考:

我从下列文档获得了上述方法。

如果这对你没有帮助,我很抱歉。

原作者:
...