From 2d27e803a3a416f5a7c83589ea845e86ccd6c235 Mon Sep 17 00:00:00 2001 From: JIANG Date: Fri, 27 Feb 2026 17:19:41 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E8=AF=B7=E6=B1=82=E6=9C=AA?= =?UTF-8?q?=E8=AE=A4=E8=AF=81=E6=97=B6=EF=BC=8C=E8=A7=A6=E5=8F=91=E7=99=BB?= =?UTF-8?q?=E9=99=86=E7=8A=B6=E6=80=81=E5=8F=98=E6=9B=B4=E6=93=8D=E4=BD=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/lib/api.ts | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/lib/api.ts b/src/lib/api.ts index c2f7a33..7e0ccf0 100644 --- a/src/lib/api.ts +++ b/src/lib/api.ts @@ -2,6 +2,8 @@ import axios from "axios"; import { config } from "@config/config"; import { useProjectStore } from "@/store/projectStore"; import { getAccessToken } from "@/lib/authToken"; +import { signOut } from "next-auth/react"; +import { useAuthStore } from "@/store/authStore"; export const API_URL = process.env.NEXT_PUBLIC_API_URL || config.BACKEND_URL; @@ -9,6 +11,8 @@ export const api = axios.create({ baseURL: API_URL, }); +let isSigningOut = false; + const isMetaProjectsRequest = (request: { baseURL?: string; url?: string; @@ -32,3 +36,17 @@ api.interceptors.request.use(async (request) => { return request; }); + +api.interceptors.response.use( + (response) => response, + async (error) => { + if (error?.response?.status === 401 && typeof window !== "undefined") { + useAuthStore.getState().setAccessToken(null); + if (!isSigningOut) { + isSigningOut = true; + await signOut({ redirect: true, callbackUrl: "/login" }); + } + } + return Promise.reject(error); + }, +);