两个防火墙 - 登录后重定向 - fosuser

时间:2014-10-09 20:44:42

标签: security symfony redirect firewall

我在使用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 / 商店部分对于/喜欢它适用于每种情况。

需要一些帮助。我没有错过什么吗?

1 个答案:

答案 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 }

给这一点,希望它对你有用。