diff --git a/client/src/lib/axios.ts b/client/src/lib/axios.ts index 59f2960..15f0ada 100644 --- a/client/src/lib/axios.ts +++ b/client/src/lib/axios.ts @@ -1,13 +1,14 @@ import type { AxiosError } from 'axios'; import axios from 'axios'; import { router } from '@/lib/router'; +import { getToken, hasToken } from './token'; export const axiosClient = axios.create({ baseURL: '/api/', }); axiosClient.interceptors.request.use((config) => { - const token = localStorage.getItem('token'); + const token = getToken(); if (token !== null) { config.headers.Authorization = `Bearer ${token}`; } @@ -17,7 +18,10 @@ axiosClient.interceptors.request.use((config) => { axiosClient.interceptors.response.use(undefined, async (error: AxiosError) => { if (error.response && error?.response.status === 401) { // TODO: refresh token - await router.navigate({ to: '/login' }); + if (!hasToken()) { + await router.navigate({ to: '/login' }); + return; + } if (error.config) { return axiosClient(error.config); } diff --git a/client/src/lib/token.ts b/client/src/lib/token.ts new file mode 100644 index 0000000..cee8ef6 --- /dev/null +++ b/client/src/lib/token.ts @@ -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; +}