我有一個用戶實體,它有一個布爾型「hasTmpPassword」。該布爾值設置爲true,直到用戶更改其密碼。將所有路由重定向到一個url直到滿足條件
與臨時密碼登錄後,我重定向到我changePassword頁(含DefaultAuthenticationSuccessHandler)
如何避免登錄用戶(使用臨時密碼),訪問網站的其他頁面,始終重定向他進入changePassword頁面?
謝謝!
我有一個用戶實體,它有一個布爾型「hasTmpPassword」。該布爾值設置爲true,直到用戶更改其密碼。將所有路由重定向到一個url直到滿足條件
與臨時密碼登錄後,我重定向到我changePassword頁(含DefaultAuthenticationSuccessHandler)
如何避免登錄用戶(使用臨時密碼),訪問網站的其他頁面,始終重定向他進入changePassword頁面?
謝謝!
登錄後,你應該在他的會議(即 changePasswordNeeded)設置標誌的用戶。
$ request-> getSession() - > set('changePasswordNeeded',true);
添加監聽器,這將onKernelRequest
kernel.listener.your_listener_name被解僱: 類:YourLitenerClass 標籤: - {名稱:kernel.event_listener,事件:kernel.controller,方法:onKernelRequest}
重定向以形成除change_temp_password請求 (對於選定的用戶)
公共函數onKernelRequest每個請求(FilterControllerEvent $ event){
$request = $event->getRequest();
if ($request->getSession()->has('changePasswordNeeded')) {
$expectedRoute = 'change_temp_password';
if ($expectedRoute === $event->getRequest()->get('_route')) {
return;
}
$url = $this->router->generate($expectedRoute);
$response = new RedirectResponse($url);
$event->setResponse($response);
}
}
我不熟悉symfony2,但在普通的PHP中,我會設置一個會話變量來指示臨時密碼用於身份驗證。然後,您可以檢查該變量是否已設置/在您處理驗證時有一定的值,並且每當用戶嘗試訪問其他頁面時都會重定向到密碼更改頁面。