Как реализовать axios.interseptors для сохранения и обновления токена?

Всем привет. Подскажите пожалуйста как реализовать interseptor в axios для сохранения дефолтного токена и обновления ?
Ниже код который у меня сейчас есть, и он не работает. В конечном счете все равно в консоли получаю ошибку 401

var APIKit = axios.create({ baseURL: url });
;

export const setClientRefreshToken = async () => {
  let refTokenStorage = await AsyncStorage.getItem("refToken");

  let payload = {
    refreshToken: refTokenStorage,
  };

  APIKit.interceptors.response.use(
    (response) => {
      return response;
    },
    (error) => {
      const originalRequest = error.config;

      if (error.response.status === 401 && originalRequest.url) {
        //переход на логин скрин
        return Promise.reject(error);
      }
      if (error.response.status === 401 && !originalRequest._retry) {
        originalRequest._retry = true;
        return APIKit.post("/authentication/refresh", payload).then((res) => {
          if (res.status === 201) {
            APIKit.defaults.headers.common["Authorization"] =
              "Bearer " + localStorageService.getAccessToken();
            //переход на скрин где был баг
            return APIKit(originalRequest);
          }
        });
      }
    }
  );
};

export const setClientToken = async () => {
  let token = await AsyncStorage.getItem("token");

  APIKit.interceptors.request.use(
    (config) => {
      if (token) {
        config.headers["Authorization"] = `Bearer ${token}`;
      }
      return config;
    },
    (error) => {
      Promise.reject(error);
    }
  );
};

export default APIKit;


Так же пробовал с использование либки axios-auth-refresh Тоже безуспешно( код ниже )
var APIKit = axios.create({ baseURL: url });

const refreshAuthLogic = async (failedRequest) => {
  let refTokenStorage = await AsyncStorage.getItem("refToken");

  let payload = {
    refreshToken: refTokenStorage,
  };

  APIKit.post("/authentication/refresh", payload).then((rt) => {
    setClientToken(rt.data.token);
    return Promise.resolve();
  });
};

createAuthRefreshInterceptor(APIKit, refreshAuthLogic)

export const setClientToken = async (token) => {
  // let token = await AsyncStorage.getItem("token");

  APIKit.interceptors.request.use(
    (config) => {
      if (token) {
        config.headers["Authorization"] = `Bearer ${token}`;
      }
      return config;
    },
    (error) => {
      Promise.reject(error);
    }
  );
};

export default APIKit;
  • Вопрос задан
  • 489 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы