Axios Interceptors для обновления аутентификации - PullRequest
1 голос
/ 24 июня 2019

Я использую перехватчики axios для проверки токена аутентификации при каждом запросе.Это отлично работает.Но когда accessToken равен нулю, getToken() запускается дважды.Есть ли способ подождать, пока закончится getToken?Я просто хочу, чтобы getToken выстрелил один раз.Другие запросы, требующие токена, должны ждать, пока getToken не будет выполнено.

let isAlreadyFetchingAccessTokenRequest = false;
api.interceptors.request.use(
  async config => {
    let token = window.localStorage.getItem("accessToken");

    if (!isAlreadyFetchingAccessTokenRequest && !token) {
      isAlreadyFetchingAccessTokenRequest = true;
      token = await getToken();

      console.log("1. save token to local storage", token);
      window.localStorage.setItem("accessToken", token);
    }

    config.headers.Authorization = `Bearer ${token}`;
    return config;
  },
  function(error) {
    return Promise.reject(error);
  }
);

1 Ответ

0 голосов
/ 24 июня 2019

Вы можете await обещание несколько раз.Так что можно попробовать что-то вроде этого

let tokenPromise = null;
api.interceptors.request.use(
  async config => {
    let token = window.localStorage.getItem("accessToken");

    if (!token) {
      if (!tokenPromise) {
        tokenPromise = getToken();
      }
      token = await tokenPromise;

      console.log("1. save token to local storage", token);
      window.localStorage.setItem("accessToken", token);
    }

    config.headers.Authorization = `Bearer ${token}`;
    ...
...