/** * Custom Login Page * * Komplett eigene Login-Seite um den Redirect-Loop-Bug in Payload zu umgehen. * Diese Seite rendert ein einfaches Login-Formular das direkt mit der Payload API kommuniziert. */ import { headers, cookies } from 'next/headers' import { redirect } from 'next/navigation' import { getPayload } from 'payload' import configPromise from '@payload-config' type SearchParams = { redirect?: string error?: string } export default async function LoginPage({ searchParams, }: { searchParams: Promise }) { const resolvedParams = await searchParams const payload = await getPayload({ config: configPromise }) // Prüfe ob User bereits eingeloggt ist const headersList = await headers() const cookieStore = await cookies() const token = cookieStore.get('payload-token')?.value if (token) { try { const { user } = await payload.auth({ headers: headersList }) if (user) { // User ist eingeloggt - weiterleiten const redirectTo = resolvedParams.redirect || '/admin' // Verhindere Redirect-Loop if (!redirectTo.includes('/login')) { redirect(redirectTo) } redirect('/admin') } } catch { // Token ungültig - weiter zum Login } } // Bestimme Redirect-Ziel (verhindere Loop) let redirectTarget = resolvedParams.redirect || '/admin' if (redirectTarget.includes('/login')) { redirectTarget = '/admin' } const error = resolvedParams.error return ( Anmelden - Payload

Anmelden

{error && (
{error === 'invalid' ? 'E-Mail oder Passwort ist falsch.' : error}
)}
) }