我在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
,因为我的应用程序中有我的刷新令牌?
更新:解决了!感谢Justin的帮助。这是我的工作代码的样子:
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);
});
答案 0 :(得分:1)
如果您有现有的oauth2客户端,您需要做的就是致电setCredentials
:
oauth2client.setCredentials({
refresh_token: 'REFRESH_TOKEN_YALL'
});
在通过客户端的下一个呼叫中,它将自动检测到没有访问令牌,注意刷新令牌,并随着新的访问令牌的到期日期一起阻止它。我在GitHub上打开的问题中概述了一些文档和代码:P
https://github.com/google/google-api-nodejs-client/pull/1160/files
希望这有帮助!