我想解决我的 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
即使没有经过身份验证的用户也可以访问这种方式!有人知道更好的解决方案吗?