72 lines
1.9 KiB
JavaScript
72 lines
1.9 KiB
JavaScript
import { useErrorStore } from "../stores/useError";
|
|
import axios from "axios";
|
|
import Cookies from "js-cookie";
|
|
|
|
axios.defaults.headers.common["Authorization"] = localStorage.getItem("token");
|
|
axios.defaults.withCredentials = true;
|
|
axios.defaults.headers.common["X-Requested-With"] = "XMLHttpRequest";
|
|
|
|
const setCSRFToken = () => {
|
|
return axios.get("/sanctum/csrf-cookie"); // resolves to '/api/csrf-cookie'.
|
|
};
|
|
|
|
// Add a request interceptor
|
|
axios.interceptors.request.use(
|
|
function (config) {
|
|
// Do something before request is sent
|
|
|
|
useErrorStore().$reset();
|
|
|
|
if (!Cookies.get("XSRF-TOKEN")) {
|
|
return setCSRFToken().then((response) => config);
|
|
}
|
|
|
|
return config;
|
|
},
|
|
function (error) {
|
|
// Do something with request error
|
|
return Promise.reject(error);
|
|
},
|
|
);
|
|
|
|
// Add a response interceptor
|
|
axios.interceptors.response.use(
|
|
function (response) {
|
|
// console.warn("axios.interceptors.response");
|
|
// console.warn(response);
|
|
|
|
if (response?.data?.data?.csrf_token?.length > 0) {
|
|
Cookies.set("XSRF-TOKEN", response.data.data.csrf_token);
|
|
} else if (response?.data?.data?.token?.length > 0) {
|
|
Cookies.set("XSRF-TOKEN", response.data.data.csrf_token);
|
|
}
|
|
|
|
// Any status code that lie within the range of 2xx cause this function to trigger
|
|
// Do something with response data
|
|
return response;
|
|
},
|
|
function (error) {
|
|
// Any status codes that falls outside the range of 2xx cause this function to trigger
|
|
// Do something with response error
|
|
switch (error.response.status) {
|
|
case 401:
|
|
localStorage.removeItem("token");
|
|
window.location.reload();
|
|
break;
|
|
case 403:
|
|
case 404:
|
|
console.error("404");
|
|
break;
|
|
case 422:
|
|
useErrorStore().$state = error.response.data;
|
|
break;
|
|
default:
|
|
console.log(error.response.data);
|
|
}
|
|
|
|
return Promise.reject(error);
|
|
},
|
|
);
|
|
|
|
export default axios;
|