Результат Axios не определен после повторения запроса от перехватчика - PullRequest
0 голосов
/ 15 сентября 2018

Я пытаюсь реализовать перехватчик, который обновляет токен с истекшим сроком действия и повторяет последний запрос. Это работает по большей части, но когда повторный исходный запрос res не определен

Это мой оригинальный запрос

this.$http.post('/auth/verify')
            .then((res) => {
                this.$store.commit('login', res.data);
            })
            .catch((e) => {
                console.error(`Error during verify: ${e}`);
            });

и это перехватчик, который я использую

axios.interceptors.response.use(null, (err) => {
if (err.response && err.response.status === 401 && err.response.data.message.includes('jwt expired')) {
    const { refreshToken } = JSON.parse(localStorage.getItem('auth'));
    axios.post('/auth/refresh', { refreshToken })
        .then((res) => {
            axios.defaults.headers.common.Authorization = `Bearer ${res.data.token}`;
            err.config.headers.Authorization = `Bearer ${res.data.token}`;
            localStorage.setItem('auth', JSON.stringify({
                refreshToken,
                token: res.data.token,
            }));

            return axios(err.config);
        })
        .catch((e) => {
            console.error(`Error refreshing token: ${e}`);
        });
    } else {
       return Promise.reject(err);
    }
});

Как я уже сказал res не определено после повторной попытки запроса после перехватчика, однако во вкладке сети chrome devtools второй запрос к /auth/verify проходит и возвращает правильный ответ, что означает, что второй запрос на проверку был успешным .

1 Ответ

0 голосов
/ 15 сентября 2018

Я сделал так, чтобы перехватчик возвращал обещание, которое разрешает axios(err.config)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...