diff --git a/frontend/src/lib/api.ts b/frontend/src/lib/api.ts index 21e6918..960b076 100644 --- a/frontend/src/lib/api.ts +++ b/frontend/src/lib/api.ts @@ -116,7 +116,7 @@ async function request( } return { data: body as T, status }; - } catch (err) { + } catch { return { error: { code: "NETWORK_ERROR", message: "网络连接失败,请检查网络" }, status: 0, diff --git a/frontend/src/lib/auth.tsx b/frontend/src/lib/auth.tsx index 6c8f51c..733175c 100644 --- a/frontend/src/lib/auth.tsx +++ b/frontend/src/lib/auth.tsx @@ -109,20 +109,14 @@ export function AuthProvider({ children }: { children: ReactNode }) { [clearRefreshTimer, persistAuth] ); - // 用 ref 保存最新回调,供 API 层 401 拦截器使用(避免闭包陈旧) - const persistAuthRef = useRef(persistAuth); - const scheduleRefreshRef = useRef(scheduleRefresh); - persistAuthRef.current = persistAuth; - scheduleRefreshRef.current = scheduleRefresh; - // 注册 API 层认证回调(用于 401 拦截器) useEffect(() => { setAuthCallbacks({ getAccessToken: () => loadAccessToken(), getRefreshToken: () => loadRefreshToken(), onRefreshSuccess: (u, at, rt) => { - persistAuthRef.current(u, at, rt); - scheduleRefreshRef.current(at); + persistAuth(u, at, rt); + scheduleRefresh(at); }, onRefreshFailed: () => { clearAuth(); @@ -130,7 +124,7 @@ export function AuthProvider({ children }: { children: ReactNode }) { setAccessToken(null); }, }); - }, []); // eslint-disable-line react-hooks/exhaustive-deps + }, [persistAuth, scheduleRefresh]); // 初始化:检查已有 token 并尝试刷新 useEffect(() => {