login_check выполняет неправильный редирект в форме входа, используя FosUserBundle

0

Я использую UserBundle, который переопределяет FosUserBundle, там я поставил users префикса для всех моих маршрутов пользователей:

// UserBundle/Resources/config/routing/all.xml
...
<import
    resource="@FooUserBundle/Resources/config/routing/security.xml" 
    prefix="/users/" />
<import
    resource="@FooUserBundle/Resources/config/routing/profile.xml"
    prefix="/users/profile" />
<import
    resource="@FooUserBundle/Resources/config/routing/registration.xml"
    prefix="/users/register" />
...

Если я проверю маршруты с помощью php app/console route:debug, они отображаются с ожидаемым префиксом:

fos_user_security_login               ANY      ANY    ANY  /users/login    
fos_user_security_check               POST     ANY    ANY  /users/login_check
fos_user_security_logout              ANY      ANY    ANY  /users/logout
fos_user_registration_register        ANY      ANY    ANY  /users/register/

Я использую следующий URL-адрес, чтобы показать форму входа:

Http://www.foo.local/app_dev.php/users/login

Чтобы управлять отправкой, я использую этот путь в шаблоне ветки:

<form action="{{ path("fos_user_security_check") }}" method="post">

Что генерирует желаемый URL-адрес действия после обработки шаблона:

<form action="/app_dev.php/users/login_check" method="post">

Моя конфигурация security.yml такова:

providers:
    fos_userbundle:
        id: fos_user.user_provider.username

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

Однако, если я зарегистрирую пользователя с использованием этой формы, он перенаправляет меня на http://www.foo.local/app_dev.php/login, а не Http://www.foo.local/app_dev.php/users/login, давая "не найденную ошибку маршрута"

Как я могу это исправить?

Теги:
fosuserbundle
symfony-2.6

1 ответ

1
Лучший ответ

FOSUserBundle не обрабатывает логин. Это делается компонентом Security. Таким образом, FOSUserBundle не имеет возможности изменить его, поскольку он не отвечает за поведение по умолчанию.

Вход в форму позволяет настроить перенаправление после входа в систему: http://symfony.com/doc/current/cookbook/security/form_login.html#redirecting-after-success

Я вижу два способа сделать это:

используйте специальный обработчик (более чистый, но более сложный и еще не документированный в официальном документе), установите перенаправление после входа на фиксированный путь (как описано в документе) с повторным перенаправлением контроллера.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню