11

我有网络服务,它是我的“普通”用户的提供者。我想为我的管理员使用 FosUserBundle。以上是我的安全配置。普通用户登录没有问题,但是当我想以管理员身份登录时,我收到了以下消息:

“您必须在安全防火墙配置中使用 form_login 配置防火墙处理的检查路径。”

这是我的安全配置:

security:
encoders:
    Locastic\CustomUserBundle\Security\User\User: plaintext
    FOS\UserBundle\Model\UserInterface: sha512

providers:
    fos_userbundle:
        id: fos_user.user_provider.username_email
    webservice:
        id: locastic.user_provider

firewalls:               
    main:
        pattern: ^/admin
    form_login:
        provider:               fos_userbundle
        login_path:             fos_user_security_login 
        check_path:             fos_user_security_check
        csrf_provider:          form.csrf_provider
        logout:       true
        anonymous:    true
        remember_me:
            key:      "%secret%"
            lifetime: 31536000 # 365 days in seconds
            path:     /
            domain:   ~ # Defaults to the current domain from $_SERVER
    user-service:
        pattern: ^/
        logout:       
          path:   /logout
        anonymous:    true
        webservice-login:
            check_path: /prijava-provjera
            login_path: /prijavi-se
            provider: webservice
            always_use_default_target_path: true
            default_target_path: /stanje-racuna

access_control:
    - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/admin, role: ROLE_ADMIN }

role_hierarchy:
    ROLE_ADMIN:       ROLE_USER
    ROLE_SUPER_ADMIN: ROLE_ADMIN
4

4 回答 4

8

我认为你需要放在form_login防火墙下(main或者添加另一个)

主防火墙下的 form_login :

firewalls:               
main:
    pattern: ^/admin
    form_login:
        provider:               fos_userbundle
        login_path:             fos_user_security_login 
        check_path:             fos_user_security_check
        csrf_provider:          form.csrf_provider
        logout:       true
        anonymous:    true ....

另一个防火墙下的 form_login

firewalls:               
    main:
        pattern: ^/admin
    second_firewall:
        pattern: ^/
        form_login:
            provider:               fos_userbundle
            login_path:             fos_user_security_login 
            check_path:             fos_user_security_check
            csrf_provider:          form.csrf_provider
            logout:       true
            anonymous:    true .....
于 2013-06-01T21:40:28.363 回答
3

您的代码仅在 check_path 值的一部分是错误的。

这是您的原始代码:

firewalls:               
    main:
        pattern: ^/admin
        form_login:
            provider:               fos_userbundle
            login_path:             fos_user_security_login 
            check_path:             fos_user_security_check
            csrf_provider:          form.csrf_provider
            logout:       true
            anonymous:    true

你应该使用类似的东西:

firewalls:               
    main:
        pattern: ^/admin
        form_login:
            provider:               fos_userbundle
            login_path:             fos_user_security_login 
            check_path:             /login_check
            csrf_provider:          form.csrf_provider
            logout:       true
            anonymous:    true

请注意check_path的值只有一个字符串。如果您使用fos_user_security_check值,您将调用SecurityController.php类并调用checkAction()方法,该方法只会引发 RuntimeError 异常并显示错误“您必须在安全性中使用 form_login 配置由防火墙处理的检查路径防火墙配置。 ” 所以修复非常简单,不使用值 fos_user_security_check

于 2017-10-22T03:33:19.937 回答
1

pattern: ^/admin

这可能是您的问题开始的地方。

尝试将其改回 ^/

然后更改 FosUserBundle 的路线

# app/config/routing.yml

fos_user_security:
    resource: "@FOSUserBundle/Resources/config/routing/security.xml"
    prefix: /admin

fos_user_profile:
    resource: "@FOSUserBundle/Resources/config/routing/profile.xml"
    prefix: /admin/profile

fos_user_register:
    resource: "@FOSUserBundle/Resources/config/routing/registration.xml"
    prefix: /admin/register

fos_user_resetting:
    resource: "@FOSUserBundle/Resources/config/routing/resetting.xml"
    prefix: /admin/resetting

fos_user_change_password:
    resource: "@FOSUserBundle/Resources/config/routing/change_password.xml"
    prefix: /admin/profile
于 2014-02-27T21:38:26.370 回答
1

在某些情况下,我可以看到这是由 composer 安装 symfony 时生成的默认安全设置引起的。

就我而言,在我的 security.yml 中,我有这个部分:

default:
    anonymous: ~

由于这是一个包罗万象的工作,它干扰了 FOSUserBundle 处理路由的能力。只需将其删除,或者,如果您有自己指定的路由,请确保它不会同时处理相同的 URL 路径。

于 2015-05-16T14:41:24.467 回答