refactor(client): token helper

Signed-off-by: Noa Virellia <noa@requiem.garden>
This commit is contained in:
2025-12-24 19:48:01 +08:00
committed by Asai Neko
parent 634c922903
commit 1d387a33c5
2 changed files with 21 additions and 2 deletions

View File

@@ -1,13 +1,14 @@
import type { AxiosError } from 'axios'; import type { AxiosError } from 'axios';
import axios from 'axios'; import axios from 'axios';
import { router } from '@/lib/router'; import { router } from '@/lib/router';
import { getToken, hasToken } from './token';
export const axiosClient = axios.create({ export const axiosClient = axios.create({
baseURL: '/api/', baseURL: '/api/',
}); });
axiosClient.interceptors.request.use((config) => { axiosClient.interceptors.request.use((config) => {
const token = localStorage.getItem('token'); const token = getToken();
if (token !== null) { if (token !== null) {
config.headers.Authorization = `Bearer ${token}`; config.headers.Authorization = `Bearer ${token}`;
} }
@@ -17,7 +18,10 @@ axiosClient.interceptors.request.use((config) => {
axiosClient.interceptors.response.use(undefined, async (error: AxiosError) => { axiosClient.interceptors.response.use(undefined, async (error: AxiosError) => {
if (error.response && error?.response.status === 401) { if (error.response && error?.response.status === 401) {
// TODO: refresh token // TODO: refresh token
await router.navigate({ to: '/login' }); if (!hasToken()) {
await router.navigate({ to: '/login' });
return;
}
if (error.config) { if (error.config) {
return axiosClient(error.config); return axiosClient(error.config);
} }

15
client/src/lib/token.ts Normal file
View File

@@ -0,0 +1,15 @@
export function setToken(token: string) {
localStorage.setItem('token', token);
}
export function getToken() {
return localStorage.getItem('token');
}
export function removeToken() {
localStorage.removeItem('token');
}
export function hasToken() {
return getToken() !== null;
}