From e3a50adea8825753f451b75a184f26d9f3bb07a4 Mon Sep 17 00:00:00 2001 From: tone Date: Thu, 18 Dec 2025 22:41:44 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=89=8D=E7=AB=AF=E7=8E=B0=E5=9C=A8?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E9=80=9A=E8=A1=8C=E8=AF=81=E7=99=BB=E5=BD=95?= =?UTF-8?q?=E8=BE=A3=EF=BD=9E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../login/components/PasskeyLoginPage.tsx | 24 +++++++++++++++++++ apps/frontend/app/console/login/page.tsx | 6 +++-- 2 files changed, 28 insertions(+), 2 deletions(-) create mode 100644 apps/frontend/app/console/login/components/PasskeyLoginPage.tsx diff --git a/apps/frontend/app/console/login/components/PasskeyLoginPage.tsx b/apps/frontend/app/console/login/components/PasskeyLoginPage.tsx new file mode 100644 index 0000000..1486d6f --- /dev/null +++ b/apps/frontend/app/console/login/components/PasskeyLoginPage.tsx @@ -0,0 +1,24 @@ +import { AuthAPI } from "@/lib/api/client"; +import LoginHeader from "./LoginHeader"; +import { Button } from "@/components/ui/button"; +import { startAuthentication } from "@simplewebauthn/browser"; + +export default function PasskeyLoginPage() { + return ( + <> + +
+ 还没想好这里放点啥捏~ +
+ + + ) +} + +export async function handleSubmit() { + const optionsJSON = await AuthAPI.getLoginByPasskeyOptions(); + const credentialResponse = await startAuthentication({ optionsJSON }); + return AuthAPI.loginByPasskey(credentialResponse); +} \ No newline at end of file diff --git a/apps/frontend/app/console/login/page.tsx b/apps/frontend/app/console/login/page.tsx index 500c042..11fd96e 100644 --- a/apps/frontend/app/console/login/page.tsx +++ b/apps/frontend/app/console/login/page.tsx @@ -7,7 +7,6 @@ import { Button } from "@/components/ui/button"; import { Card, CardContent } from "@/components/ui/card"; import { cn } from "@/lib/utils"; import { KeyRound, Phone, FileKey2 } from "lucide-react"; -import EmailLoginMode from "./components/EmailLoginMode"; import PasswordLoginMode from "./components/PasswordLoginMode"; import PhoneLoginMode from "./components/SmsLoginMode"; import { useEffect, useState } from "react"; @@ -15,6 +14,7 @@ import LoginBG from './components/login-bg.jpg'; import Image from "next/image"; import { handleAPIError } from "@/lib/api/common"; import { useUserStore } from "@/store/useUserStore"; +import PasskeyLoginPage from "./components/PasskeyLoginPage"; export type SubmitMode = 'password' | 'sms' | 'passkey'; @@ -46,6 +46,8 @@ export default function Login() { return import('./components/PasswordLoginMode'); } else if (loginMode === 'sms') { return import('./components/SmsLoginMode'); + } else if (loginMode === 'passkey') { + return import('./components/PasskeyLoginPage'); } })())?.handleSubmit; if (!handler) { @@ -64,7 +66,7 @@ export default function Login() { {loginMode === 'password' ? : null} {loginMode === 'sms' ? : null} - {/* {loginMode === 'email' ? : null} */} + {loginMode === 'passkey' ? : null}