Текущий метод для получения нового токена доступа из обновления токена - PullRequest
0 голосов
/ 09 мая 2018

Я вижу некоторые вопросы по этому поводу с решениями, которые, по-видимому, устарели в 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);
});

1 Ответ

0 голосов
/ 10 мая 2018

Если у вас уже есть клиент oauth2, все, что вам нужно сделать, это позвонить setCredentials:

oauth2client.setCredentials({
  refresh_token: 'REFRESH_TOKEN_YALL'
});

При следующем вызове, проходящем через клиента, он автоматически обнаружит, что токен доступа отсутствует, заметит токен обновления и поймает новый токен доступа вместе с датой его истечения. Я обрисовал некоторые документы и код по этому поводу в проблеме, которую вы открыли на GitHub: P

https://github.com/google/google-api-nodejs-client/pull/1160/files

Надеюсь, это поможет!

...