Symfony2 在未登录时将 /admin/* 重定向到 /admin/login(或使用 FOSUserBundle?)
Symfony2 redirect /admin/* to /admin/login when not logged in (or use FOSUserBundle?)
我是 Symfony 的新手,我正在尝试构建一个管理界面。我有一个现有用户 table,我想要的只是通过 /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 时,我收到带有 "Full authentication is required to access this resource." 的错误页面 我想要的是将应用程序从 /admin/*
(当然 /admin/login 除外)重定向到 /admin/login
未登录时。
注释和其他问题
Symfony 似乎希望你总是 使用某些现有的包,我在网上搜索了有关如何理解实际发生的事情的信息,但似乎只能找到越来越多的教程.
我应该使用 FOSUserBundle 吗?如果是这样,我可以使用现有用户 table 还是必须使用他们的架构?
你应该改变防火墙的顺序,所以 admin_area 在 main
之前
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 然后我们得到错误页面 "Full authentication is required to access this resource.".
换句话说,如果在主防火墙中添加模式,则不会出现错误(参见上面的示例)
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
我是 Symfony 的新手,我正在尝试构建一个管理界面。我有一个现有用户 table,我想要的只是通过 /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 时,我收到带有 "Full authentication is required to access this resource." 的错误页面 我想要的是将应用程序从 /admin/*
(当然 /admin/login 除外)重定向到 /admin/login
未登录时。
注释和其他问题
Symfony 似乎希望你总是 使用某些现有的包,我在网上搜索了有关如何理解实际发生的事情的信息,但似乎只能找到越来越多的教程.
我应该使用 FOSUserBundle 吗?如果是这样,我可以使用现有用户 table 还是必须使用他们的架构?
你应该改变防火墙的顺序,所以 admin_area 在 main
之前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 然后我们得到错误页面 "Full authentication is required to access this resource.".
换句话说,如果在主防火墙中添加模式,则不会出现错误(参见上面的示例)
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