#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);
}
);