Backend-Login im Frontend prüfen

Quell-ID: GitHub Discussion #2

Use Case

Im Frontend soll geprüft werden, ob der aktuelle Besucher im REDAXO-Backend angemeldet ist, um beispielsweise einen Redirect durchzuführen oder geschützte Inhalte anzuzeigen.

Verwendete AddOns

  • REDAXO Core

Zielbeschreibung

Es soll zuverlässig ermittelt werden können, ob und als welcher Benutzer jemand im Backend eingeloggt ist.

Lösung

Nur prüfen, ob jemand eingeloggt ist

if (rex_backend_login::hasSession()) {
    // Besucher ist im Backend eingeloggt
}

Diese Methode ist besonders effektiv und schnell.

Prüfen, wer eingeloggt ist (inkl. Admin-Prüfung)

$user = rex_backend_login::createUser();
if ($user) {
    // Benutzer ist eingeloggt
    if ($user->isAdmin()) {
        // Benutzer ist Admin
    }
}

Die Methode createUser() erzeugt das User-Objekt, falls es noch nicht besteht. Im Frontend wird es nicht automatisch erstellt. Die hasSession()-Methode muss nicht zusätzlich aufgerufen werden – sie wird intern von createUser() bereits geprüft.

Wichtiger Hinweis

rex::getUser() funktioniert nur zuverlässig, wenn vorher irgendwo rex_backend_login::createUser() aufgerufen wurde. Im Frontend kann man sich daher nicht auf rex::getUser() verlassen, außer man hat selbst vorher createUser() aufgerufen.

Besserer Ansatz

// Empfohlene Prüfung im Frontend
if (rex_backend_login::hasSession()) {
    $user = rex_backend_login::createUser();
    
    if ($user && $user->isAdmin()) {
        // Admin-spezifische Funktionen
    }
}

Vollständiges Beispiel für einen Redirect

// Im Template oder Modul
if (!rex_backend_login::hasSession()) {
    header('Location: /login');
    exit;
}

Diese Methode ist der zuverlässigste Weg, den Backend-Login-Status im Frontend zu prüfen.