diff --git a/apps/web/src/api/auth.ts b/apps/web/src/api/auth.ts index b671db6fb..da6e6340f 100644 --- a/apps/web/src/api/auth.ts +++ b/apps/web/src/api/auth.ts @@ -147,13 +147,14 @@ export interface SendVerificationCodeRequest { } export interface BindContactRequest { - target: "email" | "phone" - value: string - code: string + email?: string + email_code?: string + phone?: string + phone_code?: string } export interface BindContactResponse { - message: string + success: boolean user: User } diff --git a/apps/web/src/components/auth/BindContactModal.tsx b/apps/web/src/components/auth/BindContactModal.tsx index 4cfb89724..c600657de 100644 --- a/apps/web/src/components/auth/BindContactModal.tsx +++ b/apps/web/src/components/auth/BindContactModal.tsx @@ -64,14 +64,12 @@ const BindContactModal: React.FC = ({ open, onSuccess, on const values = await form.validateFields() setLoading(true) - const target = activeTab - const value = target === "email" ? values.email : values.phone + const payload = + activeTab === "email" + ? { email: values.email, email_code: values.code } + : { phone: values.phone, phone_code: values.code } - const result = await bindContact({ - target, - value, - code: values.code, - }) + const result = await bindContact(payload) message.success("绑定成功") onSuccess?.(result.user) diff --git a/apps/web/src/test/hooks/useAuth.test.tsx b/apps/web/src/test/hooks/useAuth.test.tsx index 5fbd222f1..8e48c1aad 100755 --- a/apps/web/src/test/hooks/useAuth.test.tsx +++ b/apps/web/src/test/hooks/useAuth.test.tsx @@ -94,7 +94,7 @@ describe("useAuth hooks", () => { expect(typeof result.current.mutateAsync).toBe("function") }) - it("登录成功时保存 token 并调用 setAuth", async () => { + it("登录成功时调用 setAuth 并跳转到登录前页面或首页", async () => { mockMutateAsync.mockResolvedValue({ access_token: "access-123", refresh_token: "refresh-456", @@ -106,15 +106,15 @@ describe("useAuth hooks", () => { await result.current.mutateAsync({ username: "test", password: "123" }) }) - expect(localStorage.getItem("access_token")).toBe("access-123") - expect(localStorage.getItem("refresh_token")).toBe("refresh-456") expect(mockSetAuth).toHaveBeenCalled() expect(mockNavigate).toHaveBeenCalledWith("/", { replace: true }) }) - it("没有 refresh_token 时从 localStorage 移除", async () => { + it("登录成功后跳转到 login_redirect 指定的页面", async () => { + localStorage.setItem("login_redirect", "/app/templates") mockMutateAsync.mockResolvedValue({ access_token: "access-123", + refresh_token: "refresh-456", }) const { result } = renderHook(() => useLogin(), { wrapper }) @@ -123,8 +123,8 @@ describe("useAuth hooks", () => { await result.current.mutateAsync({ username: "test", password: "123" }) }) - expect(localStorage.getItem("access_token")).toBe("access-123") - expect(localStorage.getItem("refresh_token")).toBeNull() + expect(mockNavigate).toHaveBeenCalledWith("/app/templates", { replace: true }) + expect(localStorage.getItem("login_redirect")).toBeNull() }) })