"use client"; import { useState } from "react"; import { useRouter } from "next/navigation"; import { useTranslations } from "next-intl"; import { authClient } from "@/lib/auth/client"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from "@/components/ui/card"; export default function Verify2faPage() { const router = useRouter(); const t = useTranslations("auth"); const [code, setCode] = useState(""); const [useBackupCode, setUseBackupCode] = useState(false); const [loading, setLoading] = useState(false); const [error, setError] = useState(null); async function handleSubmit(e: React.FormEvent) { e.preventDefault(); setError(null); setLoading(true); const { error } = useBackupCode ? await authClient.twoFactor.verifyBackupCode({ code: code.trim() }) : await authClient.twoFactor.verifyTotp({ code: code.trim() }); setLoading(false); if (error) { setError(error.message ?? t("twoFactorInvalidCode")); } else { router.push("/recipes"); } } return ( {t("twoFactorTitle")} {useBackupCode ? t("twoFactorBackupDescription") : t("twoFactorAppDescription")}
setCode(e.target.value)} autoComplete="one-time-code" autoFocus inputMode={useBackupCode ? "text" : "numeric"} placeholder={useBackupCode ? undefined : "000000"} required />
{error &&

{error}

}
); }