簡體   English   中英

Symfony2在未登錄時將/ admin / *重定向到/ admin / login(或使用FOSUserBundle?)

[英]Symfony2 redirect /admin/* to /admin/login when not logged in (or use FOSUserBundle?)

我是Symfony的新手,正在嘗試建立管理界面。 我有一個現有的用戶表,我想要做的只是使用/admin/login上的登錄頁面來保護^/admin.+路徑,而Symfony似乎是非常面向教程的,幾乎沒有關於如何自定義任何內容的解釋。 (或至少,關於每個部件如何與其他部件一起工作的信息不多)

這是我的security.yml

encoders:
    AppBundle\Entity\Users:
        algorithm:        sha1
        encode_as_base64: false
        iterations:       1

role_hierarchy:
    ROLE_ADMIN:       ROLE_USER
    ROLE_SUPER_ADMIN: [ ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH ]

providers:
    administrators:
        entity: { class: AppBundle:Users, property: email }
    in_memory:
        memory: ~

firewalls:
    dev:
        pattern: ^/(_(profiler|wdt)|css|images|js)/
        security: false

    main:
        anonymous: ~

    admin_area:
        pattern:    ^/admin
        anonymous:  ~
        provider:   administrators
        form_login:
            default_target_path: /admin
            check_path: /admin/login_check
            login_path: /admin/login
            remember_me: true
        logout:
            path:   /admin/logout
            target: /admin

access_control:
    - { path: ^/admin/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/admin, roles: ROLE_ADMIN }

當我轉到/ admin時,出現錯誤頁面,顯示“需要完全驗證才能訪問此資源”。 我想要的是讓應用程序在未登錄時從/admin/* (當然/ admin / login除外)重定向到/admin/login

注釋和其他問題

Symfony似乎希望您始終使用某些現有的捆綁軟件,並且我在網上搜索了有關如何了解實際情況的信息,但似乎只能找到越來越多的教程。

我應該使用FOSUserBundle嗎? 如果是這樣,我可以使用現有的用戶表還是必須使用其架構?

您應該更改防火牆的順序,因此在main之前先設置admin_area

admin_area:
    pattern:    ^/admin
    anonymous:  ~
    provider:   administrators
    form_login:
        default_target_path: /admin
        check_path: /admin/login_check
        login_path: /admin/login
        remember_me: true
    logout:
        path:   /admin/logout
        target: /admin

main:
    anonymous: ~

解釋

在我們的示例中,主防火牆不包含模式,然后,如果以一階定義,它將采用所有路由。 因此,在此防火牆(主)中,我們沒有定義form_login,然后顯示錯誤頁面,提示“訪問此資源需要完整身份驗證”。

換句話說,如果您將圖案添加到主防火牆中,則不會出現錯誤(請參見上面的示例)

main:
    pattern: /home
    anonymous: ~
admin_area:
    pattern:    ^/admin
    anonymous:  ~
    provider:   administrators
    form_login:
        default_target_path: /admin
        check_path: /admin/login_check
        login_path: /admin/login
        remember_me: true
    logout:
        path:   /admin/logout
        target: /admin

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM