Symfony2'de (FOSUserBundle kullanmayan) kendi kullanıcı yönetim sistemimi yapıyorum ve kullanıcıları parolalarını değiştirmeye zorlamak istiyorum.Symfony2 - İstek yanıtı istek üzerine iletme EventListener istekte bulunan olayları göz ardı ederken dev modda
kernal.request
olayını dinlemek için bir EventListener ayarladıktan sonra kullanıcının parolasını değiştirip değiştirmeyeceğini belirlemek için dinleyicide bir mantık gerçekleştiriyorum; eğer yaparlarsa, bir "Şifre Değiştir" rotasına yönlendirilirler.
Ben kernal.request
dinlemek için benim config.yml
hizmeti ekleyin:
password_change_listener:
class: Acme\AdminBundle\EventListener\PasswordChangeListener
arguments: [ @service_container ]
tags:
- { name: kernel.event_listener, event: kernel.request, method: onMustChangepasswordEvent }
Ve sonra dinleyici:
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);
}
ben yaşıyorum sorun dev modunda, benim dinleyici olmasıdır Ayrıca profiler çubuğu ve yardımcı istek olaylarını yeniden yönlendiriyor. Varlıklara döktüğümde ve önbelleği temizlediğimde ve siteyi üretim modunda görüntülediğimde çalışır.
Assetic/profiler bar/diğer iç denetleyicilerden gelen olayları görmezden gelmenin bir yolu var mı? Veya bir kullanıcıyı change_password sayfasına yönlendirmek için daha iyi bir yol (yalnızca giriş başarısı için değil)?
Çılgın düşünme, vahşi kesmek çözümlerine gidiyor, ama kesinlikle Symfony2'de bunu işlemek için bir yol var mı?