[英]Symfony 2 inconsistency in logout route: logout redirect to login?
我想在我的Symfony 2应用程序中解决此不一致问题:当用户未通过身份验证时,路径/app/logout
重定向到/app/login
。 相反,未经身份验证的用户应查看错误页面(也许是403)。
这是安全配置。 IS_AUTHENTICATED_FULLY
似乎是强制性的,因为用户只有在事先经过完整身份验证的情况下才能注销:
access_control:
- { path: ^/app/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/app/logout, roles: IS_AUTHENTICATED_FULLY }
还有我的AccessController
的注销操作:
/**
* @Extra\Route("logout")
* @Extra\Template
*/
public function logoutAction()
{
// Set the token to null and invalidate the session
$this->getSecurityContext()->setToken(null);
$this->getSession()->invalidate();
// Redirect url and seconds (window.location)
$seconds = 5;
$redirect = $this->getRouter()->generate('access_login');
return array('seconds' => $seconds, 'redirect' => $redirect);
}
一种解决方案是从访问控制中删除路由/app/logout
,然后在用户未完全通过身份验证时抛出异常:
if(false === $this->getSecurityContext()->isGranted('IS_AUTHENTICATED_FULLY'))
throw new AccessDeniedException();
但是,即使未经身份验证的用户也可以访问/app/logout
! 有人知道更好的解决方案吗?
只需从access_control
删除注销路径。 如果未经身份验证的用户转到注销页面,则不会有任何不好的事情-这是安全的。 不要过度设计这些东西。 ;)
顺便说一句,为什么不使用Symfony的内置注销控制器? 您可以创建一个注销处理程序以将自定义代码放入其中,而不是通过自己处理所有注销内容来重新发明轮子。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.