[3.x] UMGT: Tabelle ent_authtoken enthält uralte Werte

Das Forum soll der Ablage von Lösungen für immer wieder auftauchende Problemstellungen dienen. // This forum contains solutions to problems that frequently occur.
Antworten
Benutzeravatar
dave
Beiträge: 928
Registriert: 04.02.2011, 19:03:57
Wohnort: Berlin
Kontaktdaten:

[3.x] UMGT: Tabelle ent_authtoken enthält uralte Werte

Beitrag von dave » 11.03.2018, 17:44:31

Ich habe heute meine UMGT-User-Datenbanmk für mein Projekt portiert.
Dabei ist mir aufgefallen, dass die Tabelle ent_authtoken welche für den Auto-Login zuständig ist, alle Tokens seit Start der Datenbank enthält. Das bedeutet, dass die Datenbank im Nu beim häufigeren Gebrauch mit altem Datenmüll vollgestopft ist.

Gibt es eine Möglichkeit, die Tokens zu löschen? Wichtig ist dabei natürlich, den eingeloggten User nicht auszuloggen, also das Tokens fälschlicherweise zu entfernen. Mir fällt spontan keine Lösung dafür ein. Ideen?

Benutzeravatar
dr.e.
Administrator
Beiträge: 4593
Registriert: 04.11.2007, 16:13:53

Re: [3.x] UMGT: Tabelle ent_authtoken enthält uralte Werte

Beitrag von dr.e. » 18.03.2018, 14:49:08

Hi dave,

das UMGT-Modul bietet aktuell keine automatische Bereinigung an. Die Authentifizierung basiert aktuell lediglich darauf, dass ein Token entweder vorhanden ist oder eben nicht. Das zugehörige Cookie wird - sofern ein Token vorhanden ist - um den konfigurierten Wert verlängert.

Eine Bereinigung wäre sicher eine gute Ergänzung, evtl. sogar in einer automatisierten Art - z.B. der Begrenzung der Lebensdauer des Auth-Tokens.

Was denkst du?
Viele Grüße,
Christian

Benutzeravatar
dave
Beiträge: 928
Registriert: 04.02.2011, 19:03:57
Wohnort: Berlin
Kontaktdaten:

Re: [3.x] UMGT: Tabelle ent_authtoken enthält uralte Werte

Beitrag von dave » 18.03.2018, 15:28:01

dr.e. hat geschrieben:
18.03.2018, 14:49:08
Eine Bereinigung wäre sicher eine gute Ergänzung, evtl. sogar in einer automatisierten Art - z.B. der Begrenzung der Lebensdauer des Auth-Tokens.
Ist auf jeden Fall wichtig. Ich würde dafür eine Action anlagen, die entsprechend alte, abgelaufene Tokens entfernt. Die Action kann dann ja jeweils über die Bootstrap aufgerufen werden, wie der Auto-Login. Oder der Entwickler nutzt einen Cronjob und ruft darüber die Action auf.

Soll ich einen Tracker-Eintrag anlegen?

Benutzeravatar
dave
Beiträge: 928
Registriert: 04.02.2011, 19:03:57
Wohnort: Berlin
Kontaktdaten:

Re: [3.x] UMGT: Tabelle ent_authtoken enthält uralte Werte

Beitrag von dave » 20.03.2018, 23:00:18

Hallo Christian,

ich habe das Thema heute mal eben schnell erledigt. Alle Details findest du im Tracker:
https://adventure-php-framework.org/tra ... php?id=334

Pull requests für den Code und die Config sind dort ebenfalls in den Notizen verlinkt.

Ich habe es via FCAction realisiert, die über die Bootstrap aufgerufen werden kann. Das SQL-Select-Statement habe ich von Hand angelegt, da der Timestamp noch umgerechnet wird, was der Datenbank-Server ja direkt machen kann.

Wenn du mit der Lösung einverstanden bist kannst du den Eintrag im Tracker auch gerne direkt schliessen. Ansonsten immer her mit Anregungen ;)

Benutzeravatar
dr.e.
Administrator
Beiträge: 4593
Registriert: 04.11.2007, 16:13:53

Re: [3.x] UMGT: Tabelle ent_authtoken enthält uralte Werte

Beitrag von dr.e. » 23.03.2018, 14:07:36

Super, danke! Schaue ich mir am Wochenende an und melde mich bei dir! :)
Viele Grüße,
Christian

Benutzeravatar
dr.e.
Administrator
Beiträge: 4593
Registriert: 04.11.2007, 16:13:53

Re: [3.x] UMGT: Tabelle ent_authtoken enthält uralte Werte

Beitrag von dr.e. » 24.03.2018, 15:44:15

Hallo dave,

die Lösung gefällt mir. Habe nach dem Merge noch eine Kleinigkeit angepasst um die Logik zum Löschen der Objekte direkt im UmgtManager zu belassen und nicht über den Manager und die Action zu "verstreuen".

Schau mal ob das bei dir so funktioniert.

ACHTUNG:
Im master sind nun einige inkompatible Änderungen zur Version 3.4 eingescheckt, da ich begonnen habe das Issue https://adventure-php-framework.org/tra ... php?id=323 umzusetzen und PHP 7 Type Hinting einzuführen. Du wirst daher sicher auf einige Fehler in deiner Applikation stoßen. Wenn du möchtest, nutze gerne den Master, falls nicht, merge meine Änderungen einfach in einen lokalen Branch, der auf 3.4 basiert.

Falls du etwas Zeit hast, würde ich mich über einen Test des Masters natürlich freuen. Habe alle Änderungen soweit mit Unit Tests belegt, in einer "echten" Anwendung verhält sich das u.U. allerdings nochmal anders. :)
Viele Grüße,
Christian

Benutzeravatar
dave
Beiträge: 928
Registriert: 04.02.2011, 19:03:57
Wohnort: Berlin
Kontaktdaten:

Re: [3.x] UMGT: Tabelle ent_authtoken enthält uralte Werte

Beitrag von dave » 24.03.2018, 16:49:51

Hallo Christian,
danke fürs drüber schauen und optimieren.

Ich habe vorige Woche bereits kurz aufs APF4 gewechselt, dabei sind jedoch sehr viele Exceptions geflogen und ich bin davon ausgegangen, dass deine Änderungen noch nicht fertig sind.
Ich bin jetzt wieder auf APF4 gewechselt und habe noch an ein paar Stellen verbessert (das doofe & entfernt). Meine Änderungen checke ich ebenfalls gleich ein, dann geht's nicht verloren.

Nochmal kurz zum cleanUpOldAuthTokens():
Ich musste das select-Statement nochmal optimieren, da es ein Problem mit dem Timestamp gab. Das Statement wurde nicht richtig verarbeitet. Die Berechnung des max. gültigen Zeitraums musste ich noch in ein intval() packen, damit alles ohne Probleme ausgeführt wird. Problem hierbei wird wohl sein, dass die Methode getAutoLoginCookieLifeTime() keinen echten Integer zurück liefert.
Wenn ich das jedoch richtig verstanden habe, sollte das mit PHP7 und der passenden Definition, was die Methode zurück gibt, ja erledigt sein.

PS: Irgendwas scheint beim letzten sync via GitHub schief gelaufen zu sein. Ich wollte den master branch gar nicht mergen :oops:

Benutzeravatar
dr.e.
Administrator
Beiträge: 4593
Registriert: 04.11.2007, 16:13:53

Re: [3.x] UMGT: Tabelle ent_authtoken enthält uralte Werte

Beitrag von dr.e. » 25.03.2018, 12:26:47

Hallo dave,

die Änderungen des APF4 sind tatsächlich noch nicht durch, der Stand von gestern ist allerdings schon recht brauchbar. Die APF-Seite und ein paar private Projekte laufen schon wieder. :) Vielen Dank fürs Testen und Optimieren, ich bin mir sicher, wir finden noch einige Stellen mit "&"-Zeichen, die Probleme machen. Und das ist auf jeden Fall eine gute Gelegenheit die Unit Test Abdeckung zu optimieren.
Das Statement wurde nicht richtig verarbeitet. Die Berechnung des max. gültigen Zeitraums musste ich noch in ein intval() packen, damit alles ohne Probleme ausgeführt wird.
Danke!
Wenn ich das jedoch richtig verstanden habe, sollte das mit PHP7 und der passenden Definition, was die Methode zurück gibt, ja erledigt sein.
Grundsätzlich denke ich ja. Allerdings wollte ich nun zunächst die Methoden-Eingabe-Werte mit Issue https://adventure-php-framework.org/tra ... php?id=323 strikt deklarieren. Die Rückgabe-Werte lassen sich erst mit PHP 7.1 vernünftig für das APF definieren, da "void" und der "?"-Operator für potentielle "null"-Werte erst mit 7.1 funktionieren.

Sollte es sich um einfache Rückgabe-Werte handeln, geht das auch schon mit PHP 7.0. Ich schaue mir das mal genauer nach Issue #323 an und überlege, ob wir nicht gleich auf 7.1 als Mindest-Voraussetzung gehen.

Was denkst du?
PS: Irgendwas scheint beim letzten sync via GitHub schief gelaufen zu sein. Ich wollte den master branch gar nicht mergen :oops:
Was hast du denn als Pull-Quelle angegeben? Wenn du von GitHub 3.4 in deinen lokalen 3.4er mergen möchtest, muss die Remote-Einstellung auf "branch-3.4" reichen.
Viele Grüße,
Christian

Benutzeravatar
dave
Beiträge: 928
Registriert: 04.02.2011, 19:03:57
Wohnort: Berlin
Kontaktdaten:

Re: [3.x] UMGT: Tabelle ent_authtoken enthält uralte Werte

Beitrag von dave » 25.03.2018, 13:18:51

dr.e. hat geschrieben:
25.03.2018, 12:26:47
Grundsätzlich denke ich ja. Allerdings wollte ich nun zunächst die Methoden-Eingabe-Werte mit Issue https://adventure-php-framework.org/tra ... php?id=323 strikt deklarieren. Die Rückgabe-Werte lassen sich erst mit PHP 7.1 vernünftig für das APF definieren, da "void" und der "?"-Operator für potentielle "null"-Werte erst mit 7.1 funktionieren.

Sollte es sich um einfache Rückgabe-Werte handeln, geht das auch schon mit PHP 7.0. Ich schaue mir das mal genauer nach Issue #323 an und überlege, ob wir nicht gleich auf 7.1 als Mindest-Voraussetzung gehen.

Was denkst du?
Ich bin mir nicht sicher, inwieweit Webhoster direkt PHP7 und PHP7.1 unterstützen. Ich musste bei mir auch erstmal nachschauen und habe Glück. Kann individuell zw. PHP7 und PHP7.1 wechseln.
Ich habe für die weitere allgemeine Diskussion zum APF4 mal vorsichtshalber einen neuen Thread erstellt: https://adventure-php-framework.org/for ... f=5&t=5673
Was hast du denn als Pull-Quelle angegeben? Wenn du von GitHub 3.4 in deinen lokalen 3.4er mergen möchtest, muss die Remote-Einstellung auf "branch-3.4" reichen.
Ich nutze ja GitHub für Windows, also nicht das Kommandozeilen-Tool. Ich kann das gar nicht mehr reproduzieren, was da anders als vorher gelaufen ist. Sollte ich also irgendwo mal Mist machen, mach es bitte wieder rückgängig :roll:

Benutzeravatar
dave
Beiträge: 928
Registriert: 04.02.2011, 19:03:57
Wohnort: Berlin
Kontaktdaten:

Re: [3.x] UMGT: Tabelle ent_authtoken enthält uralte Werte

Beitrag von dave » 27.03.2018, 11:05:11

Habe die Funktion heute nochmal getestet. Alles in Ordnung. Habe den Eintrag im Tracker gleich als erledigt markiert. Gute Arbeit :)

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast