Files
HRM-System/resources/js/utils/axios-config.ts
2026-04-20 12:39:39 +08:00

45 lines
1.3 KiB
TypeScript
Executable File

import axios from 'axios';
// Set CSRF token for all requests
axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
axios.defaults.withCredentials = true;
// Intercept requests to add fresh CSRF token
axios.interceptors.request.use((config) => {
let csrfToken = null;
// Try to get CSRF token from meta tag first (most reliable)
const metaToken = document.head.querySelector('meta[name="csrf-token"]');
if (metaToken) {
csrfToken = (metaToken as HTMLMetaElement).content;
}
// Override with Inertia token if available (fresher after login)
try {
if (typeof window !== 'undefined' && (window as any).page?.props?.csrf_token) {
csrfToken = (window as any).page.props.csrf_token;
}
} catch (e) {
// Ignore errors
}
// Last resort: try to get from the XSRF-TOKEN cookie if it exists
if (!csrfToken) {
const name = 'XSRF-TOKEN=';
const decodedCookie = decodeURIComponent(document.cookie);
const ca = decodedCookie.split(';');
for (let i = 0; i < ca.length; i++) {
let c = ca[i];
while (c.charAt(0) === ' ') c = c.substring(1);
if (c.indexOf(name) === 0) csrfToken = c.substring(name.length, c.length);
}
}
if (csrfToken) {
config.headers['X-CSRF-TOKEN'] = csrfToken;
}
return config;
});
export default axios;