我有一个用户实体,它有一个布尔“hasTmpPassword”。在用户更改密码之前,此布尔值设置为true。
使用临时密码登录后,我重定向到我的changePassword页面(使用DefaultAuthenticationSuccessHandler)
如何阻止登录用户(使用临时密码)访问网站的其他页面,并始终将他重定向到changePassword页面?
谢谢!
答案 0 :(得分:1)
登录该用户后,您应该在其会话中设置标志(即。 changePasswordNeeded)。
$ request-> getSession() - > set('changePasswordNeeded',true);
添加侦听器,将触发onKernelRequest
kernel.listener.your_listener_name: class:YourLitenerClass 标签: - {name:kernel.event_listener,event:kernel.controller,method:onKernelRequest}
重定向以形成除change_temp_password请求之外的每个请求 (对于选定的用户)
public function 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);
}
}
答案 1 :(得分:0)
我不熟悉symfony2,但在普通的php中,我会设置一个会话变量来指示临时密码用于身份验证。然后,您可以检查该变量是否已设置/具有您处理身份验证的特定值,并在用户尝试访问其他页面时重定向到密码更改页面。