import { useState } from 'react'; import { Link, useNavigate, useSearchParams } from 'react-router-dom'; import { Lock, CheckCircle, AlertCircle, Eye, EyeOff } from 'lucide-react'; import Button from '../components/ui/Button'; import Input from '../components/ui/Input'; import Card from '../components/ui/Card'; import axios from 'axios'; export default function PasswordResetConfirm() { const [searchParams] = useSearchParams(); const navigate = useNavigate(); const token = searchParams.get('token') || ''; const [password, setPassword] = useState(''); const [passwordConfirm, setPasswordConfirm] = useState(''); const [showPassword, setShowPassword] = useState(false); const [isLoading, setIsLoading] = useState(false); const [error, setError] = useState(''); const [success, setSuccess] = useState(false); const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); setError(''); if (!token) { setError('Ungültiger Link: Kein Token enthalten.'); return; } if (password.length < 6) { setError('Das Passwort muss mindestens 6 Zeichen lang sein.'); return; } if (password !== passwordConfirm) { setError('Die Passwörter stimmen nicht überein.'); return; } setIsLoading(true); try { await axios.post('/api/auth/password-reset/confirm', { token, password }); setSuccess(true); setTimeout(() => navigate('/login'), 3000); } catch (err: any) { setError(err.response?.data?.error || 'Fehler beim Zurücksetzen. Bitte versuche es erneut.'); } finally { setIsLoading(false); } }; if (!token) { return (

Ungültiger Link

Dieser Reset-Link ist unvollständig. Bitte fordere einen neuen an.

); } if (success) { return (

Passwort geändert

Dein Passwort wurde erfolgreich zurückgesetzt. Du wirst in Kürze zum Login weitergeleitet.

); } return (

Neues Passwort

Vergib ein neues Passwort für deinen Account.

{error && (
{error}
)}
setPassword(e.target.value)} required minLength={6} autoComplete="new-password" className="block w-full px-3 py-2 pr-10 border border-gray-300 rounded-lg shadow-sm focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-blue-500" />

Mindestens 6 Zeichen

setPasswordConfirm(e.target.value)} required minLength={6} autoComplete="new-password" />
); }