import { useState, useEffect } from 'react'; import { Link, useNavigate, useSearchParams } from 'react-router-dom'; import PasswordStrength from '../components/PasswordStrength.jsx'; export default function ResetPassword() { const [params] = useSearchParams(); const navigate = useNavigate(); const token = params.get('token') || ''; const [password, setPassword] = useState(''); const [password2, setPassword2] = useState(''); const [status, setStatus] = useState(null); // null | 'done' | 'error' const [errMsg, setErrMsg] = useState(''); const [busy, setBusy] = useState(false); const [appInfo, setAppInfo] = useState({ appName: 'Crowdlending Tracker', iconUrl: null }); useEffect(() => { fetch('/api/app-info') .then(r => r.json()) .then(d => setAppInfo(d)) .catch(() => {}); }, []); const submit = async (e) => { e.preventDefault(); if (password !== password2) { setErrMsg('Les mots de passe ne correspondent pas.'); setStatus('error'); return; } setErrMsg(''); setBusy(true); try { const res = await fetch('/api/auth/reset-password', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ token, password }), }); const data = await res.json(); if (!res.ok) { setErrMsg(data.error || 'Une erreur est survenue.'); setStatus('error'); } else { setStatus('done'); setTimeout(() => navigate('/login'), 3000); } } catch { setErrMsg('Impossible de joindre le serveur.'); setStatus('error'); } finally { setBusy(false); } }; return (
Lien de réinitialisation invalide ou manquant.
Faire une nouvelle demandeRedirection vers la connexion dans quelques secondes…
Se connecterChoisissez un mot de passe d'au moins 8 caractères.
Retour à la connexion
> )}