Я вижу некоторые вопросы по этому поводу с решениями, которые, по-видимому, устарели в API-интерфейсе клиента Node.js API Google Node.js (например, this и this ).
Нет документации по использованию токена обновления для получения нового токена доступа ( раздел документов ). В выпуске, опубликованном в начале 2017 года , кто-то упоминает о выходе из свойства oauth2Client.credentials
, но похоже, что он находится внутри вызова одного из других API-интерфейсов, включенных в пакет.
В моем случае я запрашиваю API Google My Business (GMB), который там не включен, но я использую часть OAuth этого пакета для аутентификации и получения моих токенов.
Мой запрос к API GMB (с использованием модуля 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);
});