axios response interceptor not working properly

Viewed 2781

Im trying to use axios interceptor with refresh token but when my token has expired. My error code within in interceptors.response is not executing. What can i do to fix this issue, i am also getting a status code of 200 which does not make much sense to me.

enter image description here

Also here is my code

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 && !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;
}

any help is appreciated

1 Answers

Try letting it like this:

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