import { boot } from 'quasar/wrappers';
import axios, { AxiosInstance } from 'axios';
import { SessionStorage } from 'quasar';
declare module 'vue' {
interface ComponentCustomProperties {
$axios: AxiosInstance;
$api: AxiosInstance;
}
}
let TOKEN = '';
const setAuthHeader = (ts: string) => {
TOKEN = ts;
for (const api of [TokenApi]) {
api.defaults.headers.common['Authorization'] = `Bearer ${ts}`;
}
};
const setToken = (token: string) => {
if (token === '') {
SessionStorage.remove(token);
TOKEN = '';
} else {
SessionStorage.set(token, token);
setAuthHeader(token);
}
};
const getToken = () => {
return SessionStorage.getItem('token') || '';
};
const JSONCT = {
'Content-Type': 'application/json',
};
const api = axios.create({
baseURL: 'https://api.mock.com',
headers: { post: JSONCT },
});
const TokenApi = axios.create({
baseURL: 'https://api.mock.com',
headers: { post: JSONCT, get: JSONCT },
});
export default boot(({ router }) => {
if (document.URL.includes('debug=local')) {
TokenApi.defaults.baseURL = 'http://localhost:8000';
}
TokenApi.interceptors.response.use(
(response) => {
return response;
},
(error) => {
if (error.response && error.response.status === 401) {
setToken('');
router.push('/login');
}
return Promise.reject(error);
}
);
router.beforeEach((to, from, next) => {
if (to.matched.some((rec) => rec.meta.requireAuth)) {
if (TOKEN === '') {
const tk = getToken() as string;
if (tk === '') {
next({ path: '/login' });
return;
}
setAuthHeader(tk);
}
}
next();
});
});
export { api, TokenApi };
Quasar项目中boot的axios
最新推荐文章于 2024-09-27 15:52:57 发布