#typescript #axios
Вопрос:
Этот перехватчик должен обновить мои токены, если срок их действия истек.
declare module "axios" {
export interface AxiosRequestConfig {
_retry?: boolean;
}
}
axios.interceptors.response.use(
(res) => res,
(error: AxiosError) => {
const originalRequest = error.config;
console.log(originalRequest._retry); // always undefined
if (error?.response?.status === 401 amp;amp; !originalRequest._retry) {
originalRequest._retry = true;
return axios
.post("/auth/refresh-token", {}, { withCredentials: true })
.then((res) => {
if (res.status === 201) {
return axios(originalRequest);
}
})
}
return Promise.reject(error);
}
);
Ключевым моментом является _retry
свойство, которое я добавил в конфигурацию запроса, чтобы оно предотвращало бесконечный цикл. но произошло обратное! это создает бесконечный цикл, потому _retry
что он всегда есть undefined
.
Я нашел некоторые проблемы на их странице Github, но не нашел решения.
ПРАВКА: Су Ю попробовал этот код с последней версией axios, и он сработал. Так что, может быть, это ошибка. Я создал проблему в репозитории axios: https://github.com/axios/axios/issues/3920
У меня есть вопрос: что, если запрос токена обновления также вернет ошибку 401?
ПОСЛЕДНЕЕ РЕДАКТИРОВАНИЕ: Наконец-то я решил эту проблему. Я нахожусь в бесконечном цикле, потому что запрос токена обновления возвращает ошибку 401, если срок действия токена обновления истек. Поэтому я изменил его на 400, и все работает так, как ожидалось. Я собираюсь ударить себя прямо сейчас!
Ответ №1:
Какую версию axios вы используете? Похоже, что axios исправил проблему на 0.19.2. Вы можете проверить параметры настраиваемой конфигурации для исправления запроса на извлечение.
Я попробовал последнюю версию(0.21.1) axios, пользовательская конфигурация работает нормально.
Комментарии:
1. да, с аксиосом все в порядке. это была моя вина (прочитайте правки). Спасибо вам:)