Перехватчик Axios правильно запускается для некоторых запросов, но не для других
Я использую перехватчик ответа на своем экземпляре axios в приложении vue cli, чтобы проверить, вернул ли ответ 401 (т. Е. Токен, отправленный в запросе, истек), а затем отправляю запрос на обновление токена, если у пользователя есть обновление токен, в противном случае верните исходную ошибку. Затем перехватчик должен повторно отправить неудавшийся запрос, а ошибка исходного запроса должна быть возвращена только в том случае, если токена обновления не было.
Это работает для многих моих запросов (сообщений и запросов на удаление), однако у меня есть запрос get, который приводит к тому, что перехватчик ведет себя неожиданно. Запрос завершается с ошибкой 401, когда токен истек (как и ожидалось) и токен обновления успешно получен, но неудавшийся запрос никогда не пересылается с новым токеном, и исходная ошибка возвращается, хотя этого не должно быть.
ApiInstance.interceptors.response.use(null, (error) => {
if (error.config && error.response && error.response.status === 401) {
var refreshToken = Auth.getRefreshTokenFromStorage();
if (refreshToken) {
var headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer ' + refreshToken
};
ApiInstance.post('user/refreshToken', {}, { headers: headers }).then((result) => {
console.log(result);
Store.dispatch('setAuthenticated', { token: result.data.accessToken, user: result.data.user, refreshToken: refreshToken });
if(Router.currentRoute.name == "login") {
Router.push({ name: 'dashboard' })
}
error.config.headers.Authorization = 'Bearer ' + result.data.accessToken;
return ApiInstance.request(error.config); //This doesn't happen with the get request
}).catch(err => {
console.log(err);
console.log("Could not refresh Token");
});
} else {
console.log("else statement");
return Promise.reject(error);
}
}
});
и запрос get выглядит следующим образом
getAllDockets() {
DocketService.getAllDockets().then(res => {
console.log(res.data);
this.items = res.data.result;
this.itemsEdited = res.data.result;
}).catch(err => {
console.log("An error occured");
})
}
Я получаю вывод журнала "произошла ошибка" из этого метода, когда я не должен быть. и он не запускается, даже если запрос refreshToken выполнен успешно.
Для сравнения приведем метод post, который работает с перехватчиком так, как ожидалось.
addDocket() {
DocketService.addDocket({name: "something"}).then(result => {
alert("it worked");
}).catch(err => {
alert("an error occured");
})
}
Есть идеи, что здесь происходит?