Files
futurewalker/resources/js/plugins/axios.js
2023-09-21 23:58:23 +08:00

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;