перехватчик ответов axios не работает должным образом

#reactjs #axios

Вопрос:

Я пытаюсь использовать перехватчик axios с токеном обновления, но когда срок действия моего токена истек. Мой код ошибки внутри в перехватчиках.ответ не выполняется. Что я могу сделать, чтобы исправить эту проблему, я также получаю код статуса 200, который для меня не имеет особого смысла.

введите описание изображения здесь

Также вот мой код

 proctedInstance.interceptors.request.use(
    async config => {
        const accesstoken = localStorage.getItem('accesstoken');
        config.headers = {
            'Authorization': `Bearer ${accesstoken}`,
            'Accept': 'application/json',
            'Content-Type': 'application/x-www-form-urlencoded'
        }
        
        return config;
    },
    error => {
        Promise.reject(error);
    }
)

proctedInstance.interceptors.response.use((response) => {
    console.log(response);
    return response
}, 
function (error) {
    const originalRequest = error.config;
    if (error.response.status === 401 amp;amp; !originalRequest._retry) {

        originalRequest._retry = true;
        return axios.post('http://localhost:4000/refresh_token')
            .then(res => {
                if (res.status === 200) {
                    localStorage.setItem('accesstoken', res.data.accesstoken)
                    console.log('my token res.data.accesstoken', res.data.accesstoken);
                    axios.defaults.headers.common['Authorization'] = 'Bearer '   localStorage.getItem('accesstoken');
                    return axios(originalRequest);
                }
            })
    }

    return Promise.reject(error);
})



export const onProtected = async () => {
    const results = await (await proctedInstance.post('/protected')).data

    if(results.data === 'This is protected data.'){
        return true;
    } else 
        return false;
}
 

любая помощь будет признательна

Комментарии:

1. Похоже, что ваш сервер неправильно отвечает со статусом 200 вместо 401

2. я понимаю, что знаю, исправлена ли моя предыдущая проблема, но теперь я не могу обновить свой файл cookie с помощью нового токена

3. Я не вижу никакого использования файлов cookie в вашем вопросе. Вы имели в виду ценность в localStorage ?

4. мой сервер отправляет файл cookie для конечной точки refresh_token, но по какой-то причине он, похоже, не работает

5. спасибо за помощь, я установил свой токен на очень короткое время, например, на 5 секунд, сейчас, кажется, все работает. я продолжу тестировать его, спасибо за помощь, Фил

Ответ №1:

Попробуй позволить этому быть таким:

 proctedInstance.interceptors.response.use(
    function (response) {
        return response;
    },
    function (error) {
        const access_token = localStorage.getItem("accesstoken");
        if (error.response.status === 401 amp;amp; access_token) {
            //Your logic to refresh token and reattempt request
        } else {
            console.error(error);
        }
        return Promise.reject(error);
    }
);