Обновить Oauth-токен через некоторое время в Node API - PullRequest
0 голосов
/ 17 мая 2019

Я выставил API REST, построенный на Express для клиента, но мой API вызывает внешний API, который требует токен ротации oauth каждые 60 минут, и я не ожидаю токен от клиента, я должен сгенерировать его самостоятельно перед вызовом внешнего API накаждые 60 минут и передаю его внешнему API. Я использую следующий код с помощью функции setTimeOut. Но я ищу любой другой лучший способ обновить токен за увиденным. Пожалуйста, помогите мне

//Refresh Token logic

     async refreshToken() {
            try {
                let token = 'xyz-sbdkd'//from api;
                // set token in global variable
                process.env.TOKEN = token

                setTimeout(() => {
                    this.refreshToken();
                }, 59 * 60000);//this will be 59 minutes
            } catch (err) {
                setTimeout(() => {
                    this.refreshToken();
                }, 3000);
            }
        }

1 Ответ

0 голосов
/ 18 мая 2019

Обычный подход заключается в обработке ошибки 401 Unauthorized, которая используется при истечении срока действия токена.

  let axiosRequest = async (options) => {
    try {
      await axios(options) // try to call
    } catch (err) {
      if (err.status === 401) { // token is expired
        let accessToken = await getNewAccessToken(refreshToken) // call the refresh token endpoint to get a new access token
        options.headers = {Authorization : `Bearer ${accessToken}`} // set the new access token to initial petition
        return await axiosRequest(options) // call again with new token
      }
      throw err
    }
  }

Более элегантный подход может быть найден с использованием собственных перехватчиков axios, но он не может его попробовать: https://gist.github.com/mkjiau/650013a99c341c9f23ca00ccb213db1c

...