Как можно отправить действие выхода из системы в случае статуса 401/403
с этим кодом
import axios from "axios";
import { Storage } from "./utils/storage";
const instance = axios.create({
baseURL: process.env.API_URL,
timeout: 3000
});
const onRequestSuccess = config => {
console.log("request success", config);
const token = Storage.local.get("auth");
if (token) {
config.headers.Authorization = `Bearer ${token}`;
}
return config;
};
const onRequestFail = error => {
console.log("request error", error);
return Promise.reject(error);
};
instance.interceptors.request.use(onRequestSuccess, onRequestFail);
const onResponseSuccess = response => {
console.log("response success", response);
return response;
};
const onResponseFail = error => {
console.log("response error", error);
const status = error.status || error.response.status;
if (status === 403 || status === 401) {
//dispatch action logout
}
return Promise.reject(error);
};
instance.interceptors.response.use(onResponseSuccess, onResponseFail);
export default instance;
ОБНОВЛЕНИЕ
Я выглянул в код реакции jhipster
и я увидел
const actions = bindActionCreators({ logOut }, store.dispatch);
setupAxiosInterceptors(() => actions.logOut());
, но я хочу использовать экземпляр как
import axios from "../../../axios";
import API_URLS from "../../../constants/api";
const accountUrl = API_URLS.account;
const account = data => {
return axios.post(accountUrl, data).then(response => {
return response.data;
});
};
export const Provider = {
account
};
, поэтому я не знаю, в какую сторону повернуть: (
WORKЭТО С
Благодаря помощи Бруно Паулино я решил это с этим кодом
import axios from "./axios";
import { Storage } from "./utils/storage";
const setupAxiosInterceptors = onUnauthenticated => {
const onRequestSuccess = config => {
console.log("request success", config);
const token = Storage.local.get("auth");
if (token) {
config.headers.Authorization = `${token.token}`;
}
return config;
};
const onRequestFail = error => {
console.log("request error", error);
return Promise.reject(error);
};
axios.interceptors.request.use(onRequestSuccess, onRequestFail);
const onResponseSuccess = response => {
console.log("response success", response);
return response;
};
const onResponseFail = error => {
console.log("response error", error);
const status = error.status || error.response.status;
if (status === 403 || status === 401) {
onUnauthenticated();
}
return Promise.reject(error);
};
axios.interceptors.response.use(onResponseSuccess, onResponseFail);
};
export default setupAxiosInterceptors;
const {dispatch} = store;
setupAxiosInterceptors(()=>{
dispatch(authLogout())
});