Symfony2 – FOSUserBundle – Несколько мест входа в систему

Я использую FOSUserBundle, и мне требуется возможность входа с двух разных маршрутов (или более). Эти маршруты будут иметь разные шаблоны, а также вход в разные области. Единственное, что отличается между входами, – это требуемое разрешение. Маршруты будут чем-то вроде

site.com/login

site.com/admin/login

а также возможно site.com/ajax_login

Я смог разобраться, как получить различные шаблоны для рендеринга, вырвав все, кроме токена CSRF, из FOSUserBundle login.html.twig (который переопределяется), затем создавая маршруты, которые отображают свои собственные поля входа, а также маршрут входа в систему (так что только маркер CSRF получает визуализацию). Это не работает для администратора / входа в систему, поскольку форма возвращается к логину, и если он не работает, он отображает эту страницу вместо этого.

Есть ли простой способ достичь этого?

Related of "Symfony2 – FOSUserBundle – Несколько мест входа в систему"

На какое-то время меня застрял в том же вопросе, а потом я создал решение самостоятельно. Я знал, что должно быть простое решение …

Я отправил запрос на 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) }}> 

Вы хотите отправить форму правильному контроллеру.