簡體   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