Fix auth refresh retry loop on expired tokens
The 401 interceptor was re-triggering itself when the refresh call also returned 401, causing repeated requests before eventually logging out. Add guards to skip refresh for the refresh endpoint itself and prevent any request from retrying more than once. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -18,12 +18,14 @@ api.interceptors.request.use(config => {
|
|||||||
api.interceptors.response.use(
|
api.interceptors.response.use(
|
||||||
response => response,
|
response => response,
|
||||||
async error => {
|
async error => {
|
||||||
if (error.response?.status === 401) {
|
const originalRequest = error.config
|
||||||
|
if (error.response?.status === 401 && !originalRequest._retry && !originalRequest.url?.includes('/auth/refresh')) {
|
||||||
|
originalRequest._retry = true
|
||||||
const authStore = useAuthStore()
|
const authStore = useAuthStore()
|
||||||
try {
|
try {
|
||||||
await authStore.refreshToken()
|
await authStore.refreshToken()
|
||||||
error.config.headers.Authorization = `Bearer ${authStore.token}`
|
originalRequest.headers.Authorization = `Bearer ${authStore.token}`
|
||||||
return api(error.config)
|
return api(originalRequest)
|
||||||
} catch {
|
} catch {
|
||||||
authStore.logout()
|
authStore.logout()
|
||||||
router.push('/login')
|
router.push('/login')
|
||||||
|
|||||||
Reference in New Issue
Block a user