来自Symfony 2.3 Security docs:
如果访问被拒绝,系统将尝试验证用户(如果尚未验证)(例如,将用户重定向到登录页面) . 如果用户已登录,将显示403“拒绝访问”错误页面 . 有关更多信息,请参见如何自定义错误页面 .
我目前正在使用 access_control
规则进行一些路由 . 我想通知匿名用户他们是否被重定向到登录路由,并显示“您必须登录才能访问该页面”的消息 . 我已经阅读了几次安全文档并且没有找到与此相关的任何内容 . 我忽略了什么吗?
如果没有,那么当他们被 access_control
规则're redirected to login (ie not if they'(如果他们只是未经授权的角色)停止时,通知用户的最佳方式是什么?
EDIT: 为了澄清,我特别询问如何检查重定向是否是由 access_control
规则引起的(如果可能的话,最好是在树枝中) .
3 回答
经过相当多的研究,我发现了正确的方法 . 您需要使用Entry Point服务并在防火墙配置中定义它 .
此方法 will not mess ,您的防火墙配置中指定了default page设置,用于登录 .
守则
security.yml:
src/Acme/UserBundle/config/services.yml
src/Acme/UserBundle/Service/LoginEntryPoint.php:
login.html.twig:
资源:
AuthenticationEntryPointInterface API
Entry Points Documentation
Security Configuration Reference
How to Customize your Form Login
Why access_denied_handle doesn't work - 感谢cheesemacfly for tip
我认为kernel.exception监听器和设置flash消息可以做到这一点 . 未经测试的例子:
唐't really know if it works or if it'是对的 . 您可以将其注册为
kernel.event_listener
. 或者,您可能更好地使用专用服务并将其设置为firewall config中access_denied_handler
的参数 . 我认为有很多可能的方法 .你能不能只有两条登录路线?
例如,在安全配置集中
在您的登录控制器中
然后在你的loginMessage.html.twg中