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