Перехватчик 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");
        })
    }

Есть идеи, что здесь происходит?

0 ответов

Другие вопросы по тегам