Symfony 安全重定向到登录页面
Symfony security redirect to login page
如果我有一条安全路线,比方说下面的 panel
,Symfony 将只允许登录用户访问。
- { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/panel, role: ROLE_USER }
对于未登录的用户,它将始终将他们重定向到 login_path(我正在使用 FOSUserBundle):
security:
firewalls:
main:
pattern: ^/
form_login:
provider: fos_userbundle
login_path: fos_user_security_login
我在哪里可以禁用或覆盖此重定向?我想直接显示登录表单,而不重定向用户。
我相信它与AccessDeniedHandlerInterface
有关,但是security.yml中需要覆盖什么密钥?默认实现在哪里?
对于其他情况,我们有 DefaultLogoutSuccessHandler, DefaultAuthenticationFailureHandler, DefaultAuthenticationSuccessHandler
,我们可以为这些情况中的每一种实现服务,扩展它们各自的接口并可以自定义方式处理这种情况。但是找不到任何关于 AccessDenied 的内容。 Its directory 仅包含接口。
我会手动执行此操作。
使您的路线可匿名访问:
- { path: ^/panel, role: [IS_AUTHENTICATED_ANONYMOUSLY, ROLE_USER] }
在您的模板中,检查是否有登录用户:
{% if app.user is null %}
<!-- Then display your login form -->
{% else %}
<!-- Display the normal view -->
{% endif %}
或从控制器执行:
if (!is_object($this->get('security.token_storage')->getToken()->getUser())) {
// Render the login form
}
像这样,您可以根据用户是否已通过身份验证来制定逻辑。
如果我有一条安全路线,比方说下面的 panel
,Symfony 将只允许登录用户访问。
- { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/panel, role: ROLE_USER }
对于未登录的用户,它将始终将他们重定向到 login_path(我正在使用 FOSUserBundle):
security:
firewalls:
main:
pattern: ^/
form_login:
provider: fos_userbundle
login_path: fos_user_security_login
我在哪里可以禁用或覆盖此重定向?我想直接显示登录表单,而不重定向用户。
我相信它与AccessDeniedHandlerInterface
有关,但是security.yml中需要覆盖什么密钥?默认实现在哪里?
对于其他情况,我们有 DefaultLogoutSuccessHandler, DefaultAuthenticationFailureHandler, DefaultAuthenticationSuccessHandler
,我们可以为这些情况中的每一种实现服务,扩展它们各自的接口并可以自定义方式处理这种情况。但是找不到任何关于 AccessDenied 的内容。 Its directory 仅包含接口。
我会手动执行此操作。
使您的路线可匿名访问:
- { path: ^/panel, role: [IS_AUTHENTICATED_ANONYMOUSLY, ROLE_USER] }
在您的模板中,检查是否有登录用户:
{% if app.user is null %}
<!-- Then display your login form -->
{% else %}
<!-- Display the normal view -->
{% endif %}
或从控制器执行:
if (!is_object($this->get('security.token_storage')->getToken()->getUser())) {
// Render the login form
}
像这样,您可以根据用户是否已通过身份验证来制定逻辑。