Ich baue mein eigenes Benutzerverwaltungssystem in Symfony2 (nicht mit FOSUserBundle) und möchte Benutzer zwingen, ihr Passwort zu ändern.Symfony2 - Redirect Antwort von Anforderung EventListener im Dev-Modus beim Ignorieren von eingebauten Anfrageereignissen
Ich habe einen EventListener eingerichtet, um das kernal.request
Ereignis zu hören, dann führe ich einige Logik im Listener durch, um festzustellen, ob der Benutzer sein Passwort ändern muss; Wenn dies der Fall ist, werden sie zu einer Route "Passwort ändern" weitergeleitet.
füge ich den Dienst meiner config.yml
auf dem kernal.request
zu hören:
password_change_listener:
class: Acme\AdminBundle\EventListener\PasswordChangeListener
arguments: [ @service_container ]
tags:
- { name: kernel.event_listener, event: kernel.request, method: onMustChangepasswordEvent }
Und dann der Zuhörer:
public function onMustChangepasswordEvent(GetResponseEvent $event) {
$securityContext = $this->container->get('security.context');
// if not logged in, no need to change password
if (!$securityContext->isGranted('IS_AUTHENTICATED_REMEMBERED'))
return;
// If already on the change_password page, no need to change password
$changePasswordRoute = 'change_password';
$_route = $event->getRequest()->get('_route');
if ($changePasswordRoute == $_route)
return;
// Check the user object to see if user needs to change password
$user = $this->getUser();
if (!$user->getMustChangePassword())
return;
// If still here, redirect to the change password page
$url = $this->container->get('router')->generate($changePasswordRoute);
$response = new RedirectResponse($url);
$event->setResponse($response);
}
Das Problem, das ich habe ist, dass in den Entwicklermodus, meine Zuhörer Außerdem werden die Profiler-Leiste und die Assestic-Request-Ereignisse umgeleitet. Es funktioniert, wenn ich Assets auslagere und den Cache lösche und die Site im Produktionsmodus betrachte.
Gibt es eine Möglichkeit, die Ereignisse von Assite/Profiler Bar/andere interne Controller ignorieren? Oder eine bessere Möglichkeit, einen Benutzer auf die Seite change_password umzuleiten (nicht nur bei erfolgreichem Login)?
Verrückt denken, wilde Hack-Lösungen, aber es gibt sicherlich einen Weg, dies elegant in Symfony2 zu behandeln?