"use client"; import { useState } from "react"; import { signIn } from "next-auth/react"; import { useRouter, useSearchParams } from "next/navigation"; import Link from "next/link"; import { Loader2, Eye, EyeOff } from "lucide-react"; export function LoginForm() { const router = useRouter(); const params = useSearchParams(); const verified = params.get("verified") === "1"; const errorParam = params.get("error"); const [email, setEmail] = useState(""); const [password, setPassword] = useState(""); const [showPwd, setShowPwd] = 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 result = await signIn("credentials", { email: email.trim().toLowerCase(), password, redirect: false, }); if (result?.error) { setError("Email ou mot de passe incorrect."); setLoading(false); return; } router.push("/dashboard"); router.refresh(); } return (
{verified && (
✅ Email confirmé ! Vous pouvez vous connecter.
)} {errorParam === "token_expired" && (
⚠️ Lien expiré. Inscrivez-vous à nouveau.
)}
setEmail(e.target.value)} required className="w-full rounded-lg border border-slate-300 px-3 py-2.5 outline-none focus:border-teal-500 focus:ring-2 focus:ring-teal-200" placeholder="vous@exemple.fr" />
setPassword(e.target.value)} required className="w-full rounded-lg border border-slate-300 px-3 py-2.5 pr-10 outline-none focus:border-teal-500 focus:ring-2 focus:ring-teal-200" placeholder="••••••••" />
{error && (
{error}
)}

Pas encore de compte ?{" "} S'inscrire gratuitement

); }