Я использую FOSUserBundle, и мне требуется возможность входа с двух разных маршрутов (или более). Эти маршруты будут иметь разные шаблоны, а также вход в разные области. Единственное, что отличается между входами, – это требуемое разрешение. Маршруты будут чем-то вроде
site.com/login
site.com/admin/login
а также возможно site.com/ajax_login
Я смог разобраться, как получить различные шаблоны для рендеринга, вырвав все, кроме токена CSRF, из FOSUserBundle login.html.twig (который переопределяется), затем создавая маршруты, которые отображают свои собственные поля входа, а также маршрут входа в систему (так что только маркер CSRF получает визуализацию). Это не работает для администратора / входа в систему, поскольку форма возвращается к логину, и если он не работает, он отображает эту страницу вместо этого.
Есть ли простой способ достичь этого?
На какое-то время меня застрял в том же вопросе, а потом я создал решение самостоятельно. Я знал, что должно быть простое решение …
Я отправил запрос на pull, который позволяет вам легко создавать новые шаблоны входа. Проверьте запрос на перенос здесь: https://github.com/FriendsOfSymfony/FOSUserBundle/pull/1186 .
Существует также еще один простой способ достижения этого. Расширьте SecurityController и измените метод renderLogin со следующим контентом
protected function renderLogin(array $data, $template) { return $this->container->get('templating')->renderResponse('YourBundle:Security:login.html.twig'); }
Затем создайте маршрут к новому создаваемому контроллеру:
admin.login: pattern: /admin/login defaults: { _controller: YourBundle:Security:login }
После этого вам нужно только изменить конфигурацию безопасности. Измените свой входной_файл_файла form_login на / admin / login, и вам хорошо идти.
Вот что я в итоге придумал, в основном оба используют один и тот же брандмауэр и используют один и тот же контекст, поэтому, когда я вхожу в систему через обычный логин, они также получают доступ к администратору (при условии, что они являются администратором)
firewalls: admin: context: site switch_user: true pattern: /admin(.*) form_login: provider: fos_userbundle login_path: /admin/login success_handler: admin_authentication_handler use_forward: false check_path: /admin/login_check failure_path: null use_referer: true always_use_default_target_path: true default_target_path: /admin/ logout: path: /admin/logout target: /admin/login anonymous: true public: pattern: ^/ context: site form_login: login_path: /login success_handler: authentication_handler failure_handler: authentication_handler provider: fos_userbundle anonymous: true logout: true
Конечно, если вам нужно сделать окно входа в AJAX, вам нужно переопределить обработчики успеха и отказа и проверить, является ли запрос XmlHttpRequest и возвращает результат входа.
Не могли бы вы разместить свой шаблон?
Вы правильно отредактировали путь в шаблоне?
<form action="{{ path('form_submit') }}" method="post" {{ form_enctype(form) }}>
Вы хотите отправить форму правильному контроллеру.