- Vérifiez votre boîte de réception
+ Vérifiez votre boîte de réception
@@ -43,16 +61,16 @@ export default function ForgotPasswordPage() {
- Lien de réinitialisation envoyé
+ Lien de réinitialisation envoyé
- Nous avons envoyé un lien de réinitialisation à {email}
+ Si cet email existe dans notre base, vous recevrez un lien de réinitialisation à {email}
- 💡 Conseil : Si vous ne recevez pas l'email dans quelques minutes, vérifiez votre dossier spam.
+ Conseil : Si vous ne recevez pas l'email dans quelques minutes, vérifiez votre dossier spam.
@@ -60,7 +78,7 @@ export default function ForgotPasswordPage() {
href={ROUTES.LOGIN}
className="inline-flex items-center justify-center w-full bg-[#1a4d2e] hover:bg-[#2d5a3d] text-white font-bold px-8 py-4 rounded-lg transition-all"
>
- Retour à la connexion
+ Retour à la connexion
@@ -75,9 +93,9 @@ export default function ForgotPasswordPage() {
{/* Title */}
-
Mot de passe oublié
+
Mot de passe oublié
- Entrez votre email pour recevoir un lien de réinitialisation
+ Entrez votre email pour recevoir un lien de réinitialisation
@@ -87,6 +105,13 @@ export default function ForgotPasswordPage() {
{/* Form Container */}
+ {/* Error Message */}
+ {error && (
+
+ {error}
+
+ )}
+
{/* Form */}
diff --git a/app/reset-password/page.tsx b/app/reset-password/page.tsx
new file mode 100644
index 0000000..4fc8492
--- /dev/null
+++ b/app/reset-password/page.tsx
@@ -0,0 +1,258 @@
+"use client";
+import { useState, useEffect, Suspense } from "react";
+import { useSearchParams, useRouter } from "next/navigation";
+import Link from "next/link";
+import { ROUTES, API_BASE_URL } from "@/utils/constants";
+
+function ResetPasswordForm() {
+ const searchParams = useSearchParams();
+ const router = useRouter();
+ const token = searchParams.get("token");
+
+ const [password, setPassword] = useState("");
+ const [confirmPassword, setConfirmPassword] = useState("");
+ const [isSubmitting, setIsSubmitting] = useState(false);
+ const [isSuccess, setIsSuccess] = useState(false);
+ const [error, setError] = useState("");
+ const [showPassword, setShowPassword] = useState(false);
+
+ useEffect(() => {
+ if (!token) {
+ setError("Token de réinitialisation manquant. Veuillez demander un nouveau lien.");
+ }
+ }, [token]);
+
+ const handleSubmit = async (e: React.FormEvent) => {
+ e.preventDefault();
+ setError("");
+
+ // Validation
+ if (password.length < 8) {
+ setError("Le mot de passe doit contenir au moins 8 caractères");
+ return;
+ }
+
+ if (password !== confirmPassword) {
+ setError("Les mots de passe ne correspondent pas");
+ return;
+ }
+
+ setIsSubmitting(true);
+
+ try {
+ const response = await fetch(`${API_BASE_URL}/auth/reset-password`, {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ body: JSON.stringify({ token, password }),
+ });
+
+ const data = await response.json();
+
+ if (data.success) {
+ setIsSuccess(true);
+ // Redirection après 3 secondes
+ setTimeout(() => {
+ router.push(ROUTES.LOGIN);
+ }, 3000);
+ } else {
+ setError(data.message || 'Une erreur est survenue');
+ }
+ } catch (err) {
+ setError('Erreur de connexion au serveur');
+ console.error('Reset password error:', err);
+ } finally {
+ setIsSubmitting(false);
+ }
+ };
+
+ if (isSuccess) {
+ return (
+
+
+
+
Mot de passe modifié !
+
+
+
+
+
+
+
+
+
+ Votre mot de passe a été réinitialisé
+
+
+
+ Vous allez être redirigé vers la page de connexion...
+