Подтвердить что ты не робот

Вы должны настроить путь проверки, который будет обрабатываться брандмауэром, используя form_login в конфигурации брандмауэра безопасности

У меня есть webservice, который является поставщиком для моих "обычных" пользователей. Я хочу использовать FosUserBundle для моих администраторов. Выше моя конфигурация безопасности. обычный вход в систему работает без проблем, но когда я хочу войти в систему как admin, я получил это сообщение:

"Вы должны настроить путь проверки, который будет обрабатываться брандмауэром, используя 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
4b9b3361

Ответ 1

Я думаю, вам нужно поставить 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 .....

Ответ 2

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

Ответ 3

В некоторых случаях я вижу, что это вызвано настройками безопасности по умолчанию, сгенерированными при установке symfony композитором.

В моем случае в моем security.yml у меня был этот раздел:

default:
    anonymous: ~

Поскольку это работало как уловка, это мешало способности FOSUserBundle обрабатывать маршрут. Просто удалите его или, если у вас есть маршрут, который вы указали сами, убедитесь, что он также не обрабатывает один и тот же URL-адрес.

Ответ 4

Ваш код неверен только в части значения 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