"use client"; import * as React from "react"; import Link from "next/link"; import { useRouter, useSearchParams } from "next/navigation"; import { authClient } from "@/lib/auth-client"; import { AuthCard } from "@/components/auth/auth-card"; import { PasswordInput, PasswordRequirements, passwordStrong } from "@/components/auth/password-input"; import { Button } from "@/components/ui/button"; import { Field, FieldError, Label } from "@/components/ui/label"; import { Alert } from "@/components/ui/alert"; function ResetForm() { const router = useRouter(); const params = useSearchParams(); const token = params.get("token"); const invalid = params.get("error") === "INVALID_TOKEN" || !token; const [password, setPassword] = React.useState(""); const [confirm, setConfirm] = React.useState(""); const [error, setError] = React.useState(null); const [loading, setLoading] = React.useState(false); async function onSubmit(e: React.FormEvent) { e.preventDefault(); if (!passwordStrong(password)) return setError("Choose a stronger password."); if (password !== confirm) return setError("Passwords do not match."); setLoading(true); const { error } = await authClient.resetPassword({ newPassword: password, token: token! }); setLoading(false); if (error) return setError(error.message ?? "This link is invalid or expired."); router.push("/login?reset=1"); } if (invalid) { return ( Request a new link}> Reset links are valid for one hour and can only be used once. ); } return (
{error ? {error} : null} setPassword(e.target.value)} autoFocus /> setConfirm(e.target.value)} /> {confirm && confirm !== password ? "Passwords do not match." : null}
); } export default function ResetPasswordPage() { return ( ); }