"use client"; import { signIn } from "next-auth/react"; import Link from "next/link"; import { useRouter } from "next/navigation"; import { useEffect, useState } from "react"; export default function LoginPage() { const router = useRouter(); const [error, setError] = useState(null); const [showVerifyLink, setShowVerifyLink] = useState(false); const [registrationEnabled, setRegistrationEnabled] = useState( null ); useEffect(() => { const loadRegistration = async () => { try { const response = await fetch("/api/settings/registration"); if (!response.ok) return; const payload = await response.json(); setRegistrationEnabled(payload.registrationEnabled !== false); } catch { setRegistrationEnabled(true); } }; loadRegistration(); }, []); const onSubmit = async (event: React.FormEvent) => { event.preventDefault(); setError(null); setShowVerifyLink(false); const formData = new FormData(event.currentTarget); const email = formData.get("email") as string; const password = formData.get("password") as string; const result = await signIn("credentials", { email, password, redirect: false }); if (result?.error) { if (result.error === "PENDING") { setError("Dein Konto wartet auf Freischaltung durch einen Admin."); return; } if (result.error === "EMAIL_NOT_VERIFIED") { setError("Bitte bestätige zuerst deine E-Mail."); setShowVerifyLink(true); return; } if (result.error === "LOCKED") { setError("Zu viele Versuche. Bitte später erneut versuchen."); return; } if (result.error === "RATE_LIMIT") { setError("Zu viele Anfragen. Bitte später erneut versuchen."); return; } setError("Login fehlgeschlagen."); return; } if (result?.ok) { setShowVerifyLink(false); router.push("/"); } }; return (

Login

Bitte anmelden.

{error &&

{error}

} {registrationEnabled !== false && (

Kein Konto?{" "} Registrieren

)}

Passwort vergessen?{" "} Zurücksetzen

{showVerifyLink && (

E-Mail nicht bestätigt?{" "} Link erneut senden

)}
); }