"use client"; import React, { useState } from 'react'; import { useRouter, useSearchParams } from 'next/navigation'; import Link from 'next/link'; import { useUser } from '../../components/UserProvider'; import { CheckCircle2, AlertCircle } from 'lucide-react'; const LoginPage = () => { const { settings, login } = useUser(); const siteName = settings?.siteName || "Afrohub"; const [email, setEmail] = useState(''); const [password, setPassword] = useState(''); const [error, setError] = useState(''); const [isUnverified, setIsUnverified] = useState(false); const [loading, setLoading] = useState(false); const [resendLoading, setResendLoading] = useState(false); const [resendMessage, setResendMessage] = useState(''); const [csrfToken, setCsrfToken] = useState(''); const router = useRouter(); const searchParams = useSearchParams(); const verified = searchParams.get('verified') === 'true'; const queryError = searchParams.get('error'); // Fetch CSRF token on mount React.useEffect(() => { fetch('/api/auth/csrf') .then(res => res.json()) .then(data => setCsrfToken(data.csrfToken)) .catch(err => console.error('Error fetching CSRF token:', err)); }, []); const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); setLoading(true); setError(''); setIsUnverified(false); setResendMessage(''); try { const res = await fetch('/api/auth/login', { method: 'POST', headers: { 'Content-Type': 'application/json', 'x-csrf-token': csrfToken }, body: JSON.stringify({ email, password }), }); const data = await res.json(); if (!res.ok) { if (res.status === 403 && data.error?.includes('vérifier')) { setIsUnverified(true); } throw new Error(data.error || 'Erreur lors de la connexion'); } // Real login with user data from DB login(data.user); router.push('/dashboard'); } catch (err: any) { setError(err.message); } finally { setLoading(false); } }; const handleResendVerification = async () => { setResendLoading(true); setError(''); setResendMessage(''); try { const res = await fetch('/api/auth/resend-verification', { method: 'POST', headers: { 'Content-Type': 'application/json', 'x-csrf-token': csrfToken }, body: JSON.stringify({ email }), }); const data = await res.json(); if (!res.ok) { throw new Error(data.error || "Erreur lors de l'envoi"); } setResendMessage(data.message); setIsUnverified(false); // Hide the resend link after successful send } catch (err: any) { setError(err.message); } finally { setResendLoading(false); } }; return (
{siteName.charAt(0)}

Connexion à votre espace

Ou créez votre compte entreprise pour 1€

{verified && (

Votre compte a été vérifié avec succès ! Vous pouvez maintenant vous connecter.

)} {resendMessage && (

{resendMessage}

)} {(error || queryError) && (

{error || queryError}

{isUnverified && ( )}
)}
setEmail(e.target.value)} />
setPassword(e.target.value)} />
Mot de passe oublié ?
); }; export default LoginPage;