Letzen Login anzeigen

Das hier ist ein Konzept, das ich umgesetzt habe, den Quellcode darf/möchte ich (noch) nicht veröffentlichen.
Aufgabenstellung: im Extranet dem Benutzer das Datum seines letzen Logins anzeigen. Problem: Sobald sich ein Benutzer in Typo einloggt, wird automatisch das Datum neu gesetzt, so dass der Benutzer immer den Zeitpunkt vor ein paar Minuten zu sehen bekommt.
Egal wie der Benutzer sich einloggt – newloginbox oder felogin (neu als Systemextension in 4.2), das Einloggen und das Setzen des Wertes findet immer auf Core-Ebene statt. Die felogin bietet zwar eine Möglichkeit für einen Hook an, da ist das Setzen des Wertes aber schon passiert und auf den alten Wert kann man nicht mehr zugreifen.
Um das Problem zu lösen, braucht man in der fe_users Tabelle zwei weitere Felder – ein Backup-Feld für lastlogin und ein Feld mit dem tatsächlichen letzen Login, nennen wir sie mal ll_bkp und real_ll.
Bei Login-Vorgang passiert folgendes: Ganz am Anfang auf Core-Ebene wird der Benutzer eingeloggt, der Wert lastlogin wird gesetzt. Wenn die Extension aufgerufen wird, wird aus dem Backup (der ist noch der alte) der Wert ins Real-Last-Login übertragen, und das Backup mit dem neuen lastlogin-Wert (der aktuelle Zeitpunkt) überschrieben. Warum braucht man das Backup-Feld? Weil man keine Möglichkeit hat, das lastlogin vor dem Überschreiben irgendwie zu sichern. Und das macht man “manuell” in der Extension.
Natürlich muss sich der Benutzer mindestens zweimal einloggen, damit im real_ll ein vernünftiger Wert steht (ist aber auch so logisch).
Wann kann man das einbauen? Man kann den Hook in der newloginbox oder felogin nutzen, um den eben beschriebenen Kopiervorgang auszuführen. Das wird dann beim Einloggen einmal ausgeführt. Das mit dem Hook klappt leider nicht, wenn die Login-Seite die Eigenschaft gesetzt hat, beim Einloggen ausgeblendet zu werden und stattdessen die Logout-Seite angezeigt wird. Da kommt es nach dem Einloggen gar nicht erst zur Ausführung des felogin/newloginbox Codes und des dazugehörigen Hooks.
Da besteht die Möglichkeit, die Extension auf jeder Seite einzubinden und die Werte nur dann zu kopieren, wenn ein Benutzer eingeloggt ist und das Backup sich vom lastlogin-Wert unterscheidet. Sobald man es einmal kopiert hat, ist es nicht mehr der Fall. Die Werte, die man zum Vergleichen benötigt stehen praktischerweise direkt im GLOBALS Objekt, das beim Einloggen mit allen in der Datenbank verfügbaren Daten des Benutzerdatensatzes geladen wird.

3 Kommentare

  1. Thomas

    Hallo!

    Schade, dass Du den Quellcode (noch) nicht veröffentlichen darfst (oder willst). Das Sache, dass das Datum des “lastlogin” das Datum des aktuellen und nicht des vorigen Logins ist, ist jedenfalls in meinen Augen widersinnig. Konzeptionell sauber ist es meiner Meinung, wie vorgeschlagen das Ganze auf 2 Felder zu verteilen, etwa “latestlogin” für das letzte, aktuellste (das gesetzt wird beim Login des FE-Users) und ein “previouslogin”… Wäre jedenfalls gespannt auf Deine Umsetzung. (Weil meine Kenntnisse nicht ausreichen, dass selbst hingebogen zu bekommen.)

    Grüße, Thomas

  2. Hallo,

    ich bin auf der Suche nach diesem Problem auf diese Page gestoßen. Da ich nirgends eine fertige Lösung gefunden habe, habe ich eine Extension programmiert und ins TER gestellt.
    Danach steht der “richtige” last login in $GLOBALS[“TSFE”]->fe_user->user[“tx_cepreviouslogin_previous”]

    Hoffe es hilft den ein oder anderem. Feedback welcome!

    Gruß

    Christian