NodeJS, как получить новый токен с рефре sh токеном с помощью google api? - PullRequest
0 голосов
/ 14 апреля 2020

После google api do c https://developers.google.com/sheets/api/quickstart/nodejs не удалось найти способ получить новый токен, используя refre sh токен с клиентом oauth2.

В do c написано: "The application should store the refresh token for future use and use the access token to access a Google API. Once the access token expires, the application uses the refresh token to obtain a new one."

Как получить новый токен, используя токен refre sh с клиентом Google oAuth2?

Пока я удалось использовать простой пост

const getTokenWithRefresh = async (refresh_token) => {
  return axios
  .post("https://accounts.google.com/o/oauth2/token", {
    client_id: clientId,
    client_secret: clientSecret,
    refresh_token: refresh_token,
    grant_type: "refresh_token",
  })
  .then((response) => {
    // TODO save new token here
    console.log("response", response.data.access_token);
    return response.data;
  })
  .catch((response) => console.log("error", response))
}

Но в идеале хотелось бы увидеть более чистый способ сделать это.

1 Ответ

0 голосов
/ 14 апреля 2020

Как вы можете извлечь из быстрого старта :

// The file token.json stores the user's access and refresh tokens, and is
// created automatically when the authorization flow completes for the first
// time.

Как это работает?

  • Функция
fs.readFile('credentials.json', (err, content) => {
  if (err) return console.log('Error loading client secret file:', err);
  // Authorize a client with credentials, then call the Google Sheets API.
  authorize(JSON.parse(content), listMajors);
});

проверяет, существуют ли учетные данные. json файл существует, и если он существует - он вызывает function authorize()

  • function authorize(), автоматически считывает секрет клиента и идентификатор клиента, которые хранятся в credentials.json файл и создает oAuth2Client
  • Кроме того, функция проверяет, существует ли файл token.json, если нет, то вызывает function getNewToken(), передавая ему oAuth2Client
  • function getNewToken() создает новый токен с информацией из credentials.sjon и указанным scopes
  • Примечание: если вы изменяете области действия, вам нужно вручную удалить старый файл token.json, чтобы создать будет запущен новый
  • После загрузки существующего token.json файла или создания нового файла function listMajors будет называться
  • Это ваша основная функция, которую вы передаете авторизация через auth и где вы можете создать действительный, авторизованный сервис для любого Goo API gle, например

const sheets = google.sheets({version: 'v4', auth});

или

const drive = google.drive({version: 'v3', auth});

  • Просто убедитесь, что вы указали в const SCOPES необходимые области для API, который вы хотите вызвать
  • токен refre sh автоматически получает новый токен доступа, когда это необходимо
...