[英]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.