要求イベントに建て無視してDEVモードでの要求のEventListenerからの応答をリダイレクトします。Symfony2のは - 私はSymfony2の(FOSUserBundleを使用していない)に自分のユーザー管理システムを構築し、自分のパスワードを変更するようユーザーに強制することができるようにしたいのです
kernal.request
イベントをリスンするEventListenerをセットアップしてから、リスナーでロジックを実行して、ユーザーがパスワードを変更する必要があるかどうかを判断します。そうであれば、「パスワードの変更」ルートにリダイレクトされます。
私はkernal.request
に聞くために私config.yml
にサービスを追加します。
password_change_listener:
class: Acme\AdminBundle\EventListener\PasswordChangeListener
arguments: [ @service_container ]
tags:
- { name: kernel.event_listener, event: kernel.request, method: onMustChangepasswordEvent }
そしてリスナー:
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);
}
私が午前問題は、DEVモードでは、私のリスナーがあるということですプロファイラバーとassays要求イベントのリダイレクトも行います。アセットをダンプしてキャッシュをクリアし、サイトを運用モードで表示すると機能します。
私はassetic /プロファイラバー/その他の内部のコントローラからのイベントを無視することができる方法はありますか?または、ユーザーをchange_passwordページにリダイレクトするより良い方法(ログインの成功だけでなく)?
狂った思考アップ野生のハックソリューションを行く、しかし確実にSymfony2の中でエレガントにこれを処理する方法はありますか?