Мне нужно отключить перенаправление после проверки входа, потому что мне нужно получить только то, что логин был успешным или нет. После отправки / login_check url дайте мне нужные данные, но продолжайте перенаправление на / login (при сбое).
/ логин после этого пуст.
Я пытаюсь настроить форму входа с помощью extjs 4, поэтому мне нужно проверить прокси-запрос ajax. login_check должен аутентифицироваться, создавать сеанс пользователя и возвращать, был ли он успешным или неудачным, но никакой переадресации нигде.
мой login.html.twig выглядит так:
{% if is_granted("IS_AUTHENTICATED_REMEMBERED") %} { success:true } {% else %} { success: false } {% endif %}
и в security.yml:
firewalls: main: form_login: provider: fos_userbundle failure_path: null failure_forward: false
Создайте обработчик проверки подлинности:
namespace YourVendor\UserBundle\Handler; // "use" statements here class AuthenticationHandler implements AuthenticationSuccessHandlerInterface, AuthenticationFailureHandlerInterface { public function onAuthenticationSuccess(Request $request, TokenInterface $token) { if ($request->isXmlHttpRequest()) { $result = array('success' => true); return new Response(json_encode($result)); } else { // Handle non XmlHttp request here } } public function onAuthenticationFailure(Request $request, AuthenticationException $exception) { if ($request->isXmlHttpRequest()) { $result = array('success' => false); return new Response(json_encode($result)); } else { // Handle non XmlHttp request here } } }
Зарегистрируйте обработчик как услугу:
services: authentication_handler: class: YourVendor\UserBundle\Handler\AuthenticationHandler
Зарегистрируйте службу в брандмауэре:
firewalls: main: form_login: success_handler: authentication_handler failure_handler: authentication_handler
Это приблизительный пример, чтобы дать вам общую идею – вам нужно будет выяснить детали самостоятельно. Если вы застряли и нуждаетесь в дополнительных разъяснениях, задайте свои вопросы в комментариях, и я попытаюсь привести пример.
Нормальный поток symfony – перенаправить вас на страницу входа, если вы не вошли в систему, что отлично подходит для людей. Но вы, похоже, ищете программное решение.
Вы пробовали установить _target_path в своей форме, чтобы объявить, что должна быть «следующая страница»? Symfony всегда будет перенаправлять вас куда-нибудь, но вы можете установить это где угодно, где бы вы ни хотели.
Я нашел эти две страницы полезными для описания внутренней работы формы входа: