FOSUserBundle enabled vs locked

Alte Symfony-Projekte gibt es viele, auch solche die in einer Sackgasse vieler Vendors stecken und dort niemals herauskommen werden. Heute gab es einige Bemühungen ein Legacy-Projekt, basierend auf Symfony 3 und FOSUserBundle, etwas aufzuwerten. Leider gab es auch einige Missverständnisse.

Als kleiner Denkzettel für uns: FOSUserBundle versteht unter dem Flag enabled nicht das gleiche wie das nicht implementierte locked. Es ist sogar ein fundamentaler Unterschied, denn enabled lässt sich über die Passwort-Vergessen-Funktion wieder reaktivieren. Es ist nicht gleichbedeutend mit einer Sperre, die man normalerweise durch einen Administrator erwarten würde.

Hierzu gab es ein Faden , zusammen mit stof und fabpot, über die Fallstricke dieser Wortwahl. Da das Bundle selbst nur Registrierung, Log-in und Passwort-Vergessen-Funktion implementiert, ist enabled tatsächlich nur als temporäres Flag für ebendiese Prozesse zu verstehen.

Ist tatsächlich eine dauerhafte Sperre durch einen Administrator erwünscht sollte, kann und sollte das AdvancedUserInterface verwendet werden, bis das eigene Projekt mit Symfony 5 auf die neuen Guards migriert wird. Das Interface bietet hierzu u. a. die Methode isAccountNonLocked(): bool welche überladen werden muss und eine freizügige Kopplung mit eigener Logik ermöglicht. Sie liegt in der Priorität höher als isEnabled(): bool der FOSUserBundle-Implementierung und greift somit auch vor dessen Flows.

Als Erinnerung: Solltet ihr mit AuthenticationListener oder AuthenticationHandler arbeiten, bitte unbedingt den vom FOSUserBundle mitgegebenen UserManager über die Dependency Injection verwenden und nicht auf Doctrine zurückfallen. Es kann sonst passieren den Änderungen am Benutzer sonst nicht korrekt gespeichert werden über die persist()-Funktion des EntityManagers.

Nach der Anpassung der eigenen Anwendung sollte unbedingt darauf geachtet werden, das alle Benutzer migriert und überprüft werden sollten, denn es könnten zwei Dinge passiert sein:

  • Personen haben durch das Zurücksetzen des Passworts wieder Zugang zum Konto erlangt.
  • Eigentlich gesperrte Benutzer sollten eigentlich eher deaktiviert (und damit locked statt enabled) sein.
mit den Stichwörtern

Weitere Themen