import { useState, useEffect } from 'react' import { useSearchParams, useNavigate } from 'react-router-dom' import { useAuth } from '../context/AuthContext' import api from '../utils/api' /** * E-Mail-Bestätigung (?token=) — gleiches Muster wie Mitai: SPA ruft /api/auth/verify/{token} auf. */ export default function VerifyPage() { const [searchParams] = useSearchParams() const token = searchParams.get('token') const navigate = useNavigate() const { checkAuth } = useAuth() const [status, setStatus] = useState('loading') const [error, setError] = useState(null) const [email, setEmail] = useState('') const [resending, setResending] = useState(false) const [resendSuccess, setResendSuccess] = useState(false) const [hasStarted, setHasStarted] = useState(false) useEffect(() => { if (hasStarted) return if (!token?.trim()) { setStatus('error') setError('Kein Verifikations-Token in der URL') return } setHasStarted(true) const run = async () => { try { const result = await api.verifyEmail(token.trim()) if (result.token) { localStorage.setItem('authToken', result.token) await checkAuth() } setStatus('success') setTimeout(() => navigate('/', { replace: true }), 1500) } catch (err) { const msg = err.message || 'Verifizierung fehlgeschlagen' if (msg.includes('bereits bestätigt') || msg.includes('bereits verwendet')) { setStatus('already_verified') setError(msg) setTimeout(() => navigate('/login', { replace: true }), 3500) } else if (msg.includes('abgelaufen')) { setStatus('expired') setError(msg) } else { setStatus('error') setError(msg) } } } run() }, [token, hasStarted, checkAuth, navigate]) const handleResend = async () => { if (!email.trim()) { setError('Bitte E-Mail-Adresse eingeben') return } setResending(true) setError(null) try { await api.resendVerification(email.trim().toLowerCase()) setResendSuccess(true) } catch (err) { setError(err.message || 'Versand fehlgeschlagen') } finally { setResending(false) } } if (status === 'loading') { return (
Einen Moment bitte.
{error || 'Bitte fordere eine neue Bestätigungs-E-Mail an.'}
{resendSuccess ? (E-Mail unterwegs — Postfach prüfen.
) : ( <> setEmail(e.target.value)} autoComplete="email" /> {error && !resendSuccess && ({error}
)} > )}{error || 'E-Mail bereits bestätigt — du kannst dich anmelden.'}
Weiterleitung zum Login…
{error}
Du wirst weitergeleitet…