From a22fa257f1940e112f326be24ef7d8b3c7c0d3f3 Mon Sep 17 00:00:00 2001 From: xiaoxia Date: Wed, 22 Jul 2026 18:43:26 +0800 Subject: [PATCH] =?UTF-8?q?fix(web):=20=E4=BF=AE=E5=A4=8D=E7=99=BB?= =?UTF-8?q?=E5=BD=95=E6=97=B6=E5=BA=8Fbug=20-=20token=E5=85=88=E5=AD=98loc?= =?UTF-8?q?alStorage=E5=86=8D=E5=8F=96=E7=94=A8=E6=88=B7=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 登录流程中,getCurrentUser() 在 setAuth() 之前执行, 导致 apiClient 请求拦截器从 localStorage 取不到 token, 请求不带 Authorization header,后端返回 401, 触发自动刷新逻辑后 clearAuth 跳回登录页。 修复:先把 token 存到 localStorage,再调 getCurrentUser, 最后 setAuth 同步 store 状态。 影响:useLogin / useWechatCallback 两个 hook --- apps/web/src/hooks/useAuth.ts | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) mode change 100644 => 100755 apps/web/src/hooks/useAuth.ts diff --git a/apps/web/src/hooks/useAuth.ts b/apps/web/src/hooks/useAuth.ts old mode 100644 new mode 100755 index ae1a958cf..5e620e3b0 --- a/apps/web/src/hooks/useAuth.ts +++ b/apps/web/src/hooks/useAuth.ts @@ -20,7 +20,14 @@ export const useLogin = () => { const data = await mutation.mutateAsync(credentials) const refreshToken = data.refresh_token ?? null - // 获取用户信息 + // 先存 token 到 localStorage,确保后续请求拦截器能取到 + // (apiClient 拦截器从 localStorage 读 access_token) + localStorage.setItem("access_token", data.access_token) + if (refreshToken) { + localStorage.setItem("refresh_token", refreshToken) + } + + // 再获取用户信息(这时候请求带 Authorization header) const user = await authApi.getCurrentUser() setAuth(user, data.access_token, refreshToken) @@ -54,6 +61,15 @@ export const useWechatCallback = () => { localStorage.removeItem("wechat_state") const result = await mutation.mutateAsync({ code, state }) + + // 先存 token 到 localStorage,确保后续请求拦截器能取到 + // (apiClient 拦截器从 localStorage 读 access_token) + localStorage.setItem("access_token", result.access_token) + if (result.refresh_token) { + localStorage.setItem("refresh_token", result.refresh_token) + } + + // 再获取用户信息(这时候请求带 Authorization header) const user = await authApi.getCurrentUser() setAuth(user, result.access_token, result.refresh_token) -- 2.54.0