我在 Google APIs Node.js Client OAuth API(例如this和this)中似乎不推荐使用的解决方案中看到了一些关于此的问题。
我没有看到有关使用刷新令牌获取新访问令牌的文档(文档部分)。在 2017 年初的一个问题中,有人提到下车oauth2Client.credentials
,但看起来这是对包装在包中的其他 API 之一的调用。
在我的用例中,我正在查询 Google My Business (GMB) API,该 API 未包含在其中,但我正在使用此包的 OAuth 部分进行身份验证并获取我的令牌。
我对 GMB API 的请求(使用request-promise
模块)看起来像这样:
function getLocations () {
return request({
method: 'POST',
uri: `${gmbApiRoot}/accounts/${acct}/locations:batchGet`,
headers: {
Authorization: `OAuth ${gmbAccessToken}`
}
})
.then(function (response) {
console.log(response);
})
.catch(function (err) {
// ...
});
}
我认为我不能oauth2Client
像在问题响应中那样将其传递到授权标头中。access_token
鉴于我的刷新令牌缓存在我的应用程序中,有没有办法直接请求新的?
更新:解决了!感谢贾斯汀的帮助。这是我的工作代码的样子:
oauth2Client.setCredentials({
refresh_token: storedRefreshToken
});
return oauth2Client.refreshAccessToken()
.then(function (res) {
if (!res.tokens && !res.credentials) {
throw Error('No access token returned.');
}
const tokens = res.tokens || res.credentials;
// Runs my project-level function to store the tokens.
return setTokens(tokens);
});