diff --git a/apps/web/src/pages/auth/WechatCallback.tsx b/apps/web/src/pages/auth/WechatCallback.tsx index 783198149..3dc75a6e9 100644 --- a/apps/web/src/pages/auth/WechatCallback.tsx +++ b/apps/web/src/pages/auth/WechatCallback.tsx @@ -39,7 +39,13 @@ const WechatCallback: React.FC = () => { const result = await wechatCallback(code, state) - // 获取用户信息 + // 先把 token 存到 localStorage,让请求拦截器能拿到(getCurrentUser 需要带 token) + localStorage.setItem("access_token", result.access_token) + if (result.refresh_token) { + localStorage.setItem("refresh_token", result.refresh_token) + } + + // 获取用户信息(这时候请求拦截器能拿到 token 了) const userData = await getCurrentUser() const user: User = normalizeUser(userData) setAuth(user, result.access_token, result.refresh_token) diff --git a/apps/web/src/test/pages/auth/WechatCallback.test.tsx b/apps/web/src/test/pages/auth/WechatCallback.test.tsx new file mode 100644 index 000000000..fe558f930 --- /dev/null +++ b/apps/web/src/test/pages/auth/WechatCallback.test.tsx @@ -0,0 +1,79 @@ +import { describe, expect, it, vi, beforeEach } from "vitest" +import { render, screen } from "@testing-library/react" +import { MemoryRouter } from "react-router-dom" +import WechatCallback from "@/pages/auth/WechatCallback" + +vi.mock("react-router-dom", async () => { + const actual = await vi.importActual("react-router-dom") + return { + ...actual, + useNavigate: () => vi.fn(), + useSearchParams: () => [new URLSearchParams({ code: "test_code", state: "test_state" })], + } +}) + +vi.mock("@/api/auth", () => ({ + wechatCallback: vi.fn(() => new Promise(() => {})), // pending promise,保持loading + getCurrentUser: vi.fn(), + normalizeUser: (u: unknown) => u, +})) + +vi.mock("@/store/authStore", () => ({ + useAuthStore: () => ({ + setAuth: vi.fn(), + }), +})) + +vi.mock("@/components/auth/BindContactModal", () => ({ + default: ({ open }: { open: boolean }) => ( +