Новый брандмауэр пользователя sonata продолжает перенаправлять на неправильный маршрут

в основном то, что я пытаюсь сделать, - это создать новую форму входа на основе пользователя сонаты, которая является реализацией пользователя fos, используемой в электронной коммерции сонаты. Новая форма входа должна делать то же самое, что и исходная форма входа, но иметь другой макет.

Что я сделал:
- создал новый файл ветки
- добавил маршрутизацию:

m2m_partner:
resource: "@ApplicationSonataUserBundle/Resources/config/routing/partnerlogin.xml"
prefix: /partner

содержание:

<route id="m2m_partner_login" pattern="/login">
<default key="_controller">ApplicationSonataUserBundle:Partner:login</default>
</route>

-Добавлен новый брандмауэр в security.yml (очень похожий на тот, что в 'admin')

    partner:
        pattern:      /partner(.*)
        context:        user
        form_login:
            provider:       fos_userbundle
            login_path:     /partner/login
            use_forward:    false
            check_path:     /partner/login_check
            failure_path:   null
        logout:
            path: /partner/logout
            invalidate_session: false
            handlers: ['sonata.page.cms_manager_selector']
        anonymous:    true
        switch_user: true

После этого, когда я ввожу правильные учетные данные, он регистрирует меня нормально, но когда я ввожу неверные учетные данные, он перенаправляет меня на /login вместо /partner/login с сообщением «неверные учетные данные». Как я могу это исправить? я что-то упускаю?

редактировать 1:
я проверил, как происходит вход в систему с правами администратора, и обнаружил, что действие формы переходит к другому контроллеру, чем обычный вход, который выглядит точно так же, как действие «проверить» пользователя fos:

    public function checkAction()
{
    throw new \RuntimeException('You must configure the check path to be handled by the firewall using form_login in your security firewall configuration.');
}

я скопировал его на свой контроллер, и после этого все, что я получаю после отправки формы с неправильными учетными данными, это эта ошибка:

 You must configure the check path to be handled by the firewall using form_login in your security firewall configuration. 

person nonab    schedule 11.12.2014    source источник


Ответы (2)


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

 firewalls:
      partner:
         pattern:      /partner(.*)
         ......



      main:
       .....
person Piotr Galas    schedule 17.12.2014

Вы должны изменить failure_path на свой новый маршрут:

  form_login:
        failure_path:   /partner/login

Or

  form_login:
        failure_path:   m2m_partner_login

Второй способ чище, потому что он использует имя маршрута вместо URL-адреса. Поэтому, если вы измените URL-адрес в своем xml, это не сломает ваш брандмауэр.

http://symfony.com/doc/current/cookbook/security/form_login.html#redirecting-on-login-failure

Я предполагаю, что если вы не укажете failure_path, он вернется к пути сбоя по умолчанию (/login).

изменить1:

Вам нужно добавить в свой маршрут xml:

<route id="m2m_partner_login_check" pattern="/login_check">
    <default key="_controller">ApplicationSonataUserBundle:Partner:check</default>
    <requirement key="_method">POST</requirement>
</route>

<route id="m2m_partner_logout" pattern="/logout">
    <default key="_controller">ApplicationSonataUserBundle:Partner:logout</default>
</route>

Возможно, это исправит исключение.

person HypeR    schedule 11.12.2014
comment
все еще не повезло, я даже пытался изменить все маршруты в конфигурации безопасности с шаблона на имя маршрута, но это не помогло - person nonab; 15.12.2014