Hallo zusammen,
ich muß für ein Projekt die Vergabe eines neuen Passworts an ein Member erweitern.
Wenn ich das korrekt nachgelesen habe, wird in modules/registration/ModulePassword.php "nur" die Längenvorgabe für ein neues Passwort geprüft.
Ich benötige hier aber noch weitere Prüfungen bzgl. Passwort-Komplexität, die bei Scheitern auch dem User kommuniziert werden müssen.
Ich habe mich gestern etwas duch die beteiligten Module gelesen und hätte gerne eure Meinung/Einschätzung zu meinem Ansatz (vielleicht denke ich ja auch zu kompliziert):
Um möglichst updatesicher zu sein, erstelle ich ein eigenes Modul, das ich unter
PHP-Code:
$GLOBALS['FE_MOD']['user']['lostPassword'] = 'MyExtendedModulePassword';
registriere. Über einer Erweiterung der Datenbank erstelle ich neue Felder wie z.B. eines in tl_member, das
speichert, wann das Passwort zuletzt geändert wurde. Außerdem lege ich eine neue Tabelle mit der
Passworthistorie an
Code:
id | userid | altes_pwd
mit der ich ggf. prüfen kann, ob ein neues Passwort gültig ist, weil von diesem User noch nicht (oder "schon länger nicht") vergeben wurde.
Das oben registrierte MyExtendedModulePassword.php sieht dann in etwas so aus.
PHP-Code:
class MyExtendedModulePassword extends ModulePassword {
/**
* Set the new password
*/
protected function setNewPassword() {
// hier bestehenden Code dupliziert und eigene Erweiterungen eingetragen
// nicht elegant :-(
}
}
Alternative: die bestehende ModulePassword.php patchen und einen Hook einbauen (habe ich im Hook überhaupt Zugriff auf den User und das $this um Templatevariablen zu setzen und ggf. das Template zu wechseln?).
Der vorgesehene Hook aus $GLOBALS['TL_HOOKS']['setNewPassword'] hilft mir leider nicht weiter (?), da an dieser Stelle das neue Passwort ja bereits gesetzt ist.
Für die Ausgabe einer Meldung an den User, der ein neues Passwort vergeben will fällt mir (alternativ) ein, ein eigenes Widget in Anlehnung an system/modules/FormPassword.php zu implementieren. In dessen
PHP-Code:
protected function validator($varInput) { }
könnten der Verifikationscode und die Meldungen an den User untergebracht werden.
Dieses Widget wäre dann unter
PHP-Code:
$GLOBALS['TL_FFL']['password']
zu registrieren? Das neue Widget hätte durch
PHP-Code:
Widget extends Controller extends System
auch die Möglichkeit auf den User zuzugreifen und in die Datenbank zu schreiben?
Danke für eure Meinungen!
Lesezeichen