簡體   English   中英

如何在不使用google-api-nodejs-client的情況下處理Google API access_token過期?

[英]How to handle Google API access_token expired without using google-api-nodejs-client?

我已經實現了獲取access_token,refresh_token和expire_date的代碼。 所有這些值已存儲在數據庫中。

現在,我需要一種方法來獲取另一個access_token,以防舊的過期而不使用google-api-nodejs-client軟件包

原因是該模塊最近有錯誤,您可以在這里檢查(我的評論是最新的) 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)
});

回應:

如果仍可以使用訪問令牌,則返回以下響應。

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

如果訪問令牌尚未使用,則返回以下響應。

{
 "error_description": "Invalid Value"
}

參考:

我從以下文件中獲得了上述方法。

如果這對您沒有用,對不起。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM