【发布时间】:2023-03-22 23:10:01
【问题描述】:
我在 Google API Node.js 客户端 OAuth API(例如,this 和 this)中似乎不推荐使用的解决方案中看到了一些与此相关的问题。
我没有看到有关使用刷新令牌获取新访问令牌 (docs section) 的文档。 In an issue from early 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);
});
【问题讨论】:
标签: google-api-nodejs-client google-my-business-api