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