我在使用FosUserBundle基于Symfony2在我的应用程序中配置两个防火墙时遇到问题。我想要的是,在我的网站,前端和后端的安全区域为客户提供安全区域。我设法做的是,我确实有两个部分(/ shop)和(/ admin),到目前为止他们正在工作,但问题是,即使我登录商店表单或管理员表单不断地将我重定向到同一个方向(/)。
这是我的security.yml:
jms_security_extra:
secure_all_services: false
expressions: true
security:
encoders:
FOS\UserBundle\Model\UserInterface: sha512
role_hierarchy:
ROLE_CUSTOMER: ROLE_USER
ROLE_ADMIN: ROLE_USER
ROLE_SUPER_ADMIN: ROLE_ADMIN
providers:
fos_userbundle:
id: fos_user.user_provider.username
firewalls:
admin_secured:
context: site
pattern: ^/admin/
form_login:
provider: fos_userbundle
csrf_provider: form.csrf_provider
use_referer: true
always_use_default_target_path: true
default_target_path: /admin/
login_path: /login
check_path: /admin/login_check
logout:
path: /admin/logout
anonymous: false
main:
context: site
pattern: ^/
form_login:
provider: fos_userbundle
csrf_provider: form.csrf_provider
default_target_path: /
target_path_parameter: redirect_url
login_path: frd_login
logout:
path: fos_user_security_logout
target: frd_home
anonymous: true
access_control:
- { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/shop/login, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/shop/, role: ROLE_USER }
- { path: ^/admin/, role: ROLE_SUPER_ADMIN }
我的config.yml的大块:
fos_user:
db_driver: propel
firewall_name: main
user_class: FOS\UserBundle\Propel\User
group:
group_class: FOS\UserBundle\Propel\Group
同样,当我登录 / admin 或 / shop (< - 适用于客户)时,它会将我重定向到家中( / )但是从配置中我确定在管理部分中它应该将我重定向到 / admin / 和商店部分对于/喜欢它适用于每种情况。
需要一些帮助。我没有错过什么吗?
答案 0 :(得分:0)
您可能希望更改有关如何命名网址的一些内容。我认为Symfony感到困惑,因为当你进入管理员登录页面(/ login)时,你实际上正在使用' main'防火墙,而不是' admin_secured'防火墙(请注意,为了使用您的管理防火墙,网址必须以pattern
' / admin')开头。所以尝试这样的防火墙设置:
firewalls:
admin_secured:
context: site
pattern: ^/admin/
form_login:
provider: fos_userbundle
csrf_provider: form.csrf_provider
#use_referer: true # this is not needed if you always use default target
always_use_default_target_path: true
default_target_path: /admin/
login_path: /admin/login
check_path: /admin/login_check
logout:
path: /admin/logout
anonymous: false
main:
context: site
pattern: ^/
form_login:
provider: fos_userbundle
csrf_provider: form.csrf_provider
default_target_path: /
target_path_parameter: redirect_url
login_path: /shop/login
check_path: /shop/login_check
logout:
path: fos_user_security_logout
target: frd_home
anonymous: true
access_control:
- { path: ^/shop/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/admin/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/shop/, role: ROLE_USER }
- { path: ^/admin/, role: ROLE_SUPER_ADMIN }
# allow all other URLS to be accessed without authentication (may or may not be what you want)
- { path: ^/, role: IS_AUTHENTICATED_ANONYMOUSLY }
给这一点,希望它对你有用。