繁体   English   中英

Symfony2安全性不同防火墙不能正确重定向到登录

[英]Symfony2 security different firewalls don't redirect properly to login

我根据用户类型配置了3个安全区域:admin,teacher和student。 当我访问/ admin时,我正确地重定向到/ admin / login。 但是当我访问/老师或/学生重定向失败时,虽然我被重定向到/ teacher / login或/ student / login我收到此错误:

页面未正确重定向 Firefox检测到服务器以永远不会完成的方式重定向此地址的请求。

这是我的security.yml:

firewalls:
    # disables authentication for assets and the profiler, adapt it according to your needs
    dev:
        pattern:  ^/(_(profiler|wdt)|css|images|js)/
        security: false
    admin:
         pattern: ^/admin
         form_login:
             check_path: login_check
             login_path: /admin/login
             provider: chain_provider
             csrf_provider: form.csrf_provider
             default_target_path: /admin
         logout:       true
    teacher:
         pattern: ^/teacher
         form_login:
             check_path: login_check
             login_path: /teacher/login
             provider: chain_provider
             csrf_provider: form.csrf_provider
             default_target_path: /teacher
         logout:       true
    student:
         pattern: ^/student
         form_login:
             check_path: login_check
             login_path: /student/login
             provider: chain_provider
             csrf_provider: form.csrf_provider
             default_target_path: /student
         logout:       true

access_control:
    - { path: ^/admin/login, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/teacher/login, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/teacher/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/student/login, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/student/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/admin, role: ROLE_ADMIN }
    - { path: ^/teacher, role: ROLE_TEACHER }
    - { path: ^/student, role: ROLE_USER }

我需要协助。 我错过了什么? 谢谢

您已经保护了登录表单...所以当Symfony尝试重定向到您的登录表单时,它会尝试重定向到您的登录表单,尝试重定向到您的登录表单,尝试重定向...

尝试这个:

admin_login:
    pattern:                 ^/admin/login
    anonymous:               ~

admin:
    pattern:                 ^/admin
    form_login:
        login_path:          /admin/login
        check_path:          /login_check
        provider:            chain_provider
        csrf_provider:       form.csrf_provider
        default_target_path: /admin
    logout:
        path:                /logout
        target:              /admin/login

teacher_login:
    pattern:                 ^/teacher/login
    anonymous:               ~

teacher:
    pattern:                 ^/teacher
    form_login:
       ... etc ...

student_login:
    pattern:                 ^/student/login
    anonymous:               ~

student:
    pattern:                 ^/student
    form_login:
        .... etc ...

access_control:
    - { path: ^/admin/login$,   roles: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/teacher/login$, roles: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/student/login$, roles: IS_AUTHENTICATED_ANONYMOUSLY }
    ...
    - { path: ^/admin,          roles: ROLE_ADMIN }
    - { path: ^/teacher,        roles: ROLE_TEACHER }
    - { path: ^/student,        roles: ROLE_USER }

这包含在Symfony Cookbook中的避免常见陷阱标题下。

你的防火墙的顺序是重要的

请注意,“登录防火墙”是在其合作伙伴防火墙之前定义的。

另请注意,我在check_path的前面添加了一个'/',以提醒您需要为其定义路由。 如果使用注释来定义路由,则需要在某个控制器中创建一个空操作方法,以便路由器可以咀嚼。

您的“退出”定义对我来说也很可疑。 不是说它们完全不正确 - 只是因为我以前从未见过它们这样定义过,而且根据我所知道的Symfony,我不确定你的定义是如何工作的。

对于我在上面的例子中定义的'/ logout'路径,你会 - 再次 - 需要为这些路径创建一个有效的路由......即使Symfony实际上不会执行你定义的任何'logout'方法在您的控制器中。

注销东西覆盖HERE

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM