Как отключить перенаправление после Login_чека в Symfony 2
Вопрос
Мне нужно отключить перенаправление после проверки входа в систему, потому что мне нужно получить только то, что логин был успешным или нет. После URL -адресачики /логинга.
/вход в систему пуст после этого.
Я пытаюсь настроить форму для входа в систему, используя ExtJS 4, поэтому мне нужно проверить через запрос POST AJAX. login_check должен аутентифицировать, создать сеанс пользователя и вернуть, был ли это успех или неудача, но нигде не пересылала.
my 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 всегда собирается переслать вас куда -то, но вы можете установить это куда угодно, где захотите.
Я нашел эти две страницы полезными для описания внутренней работы формы входа в систему:
- Как настроить вход в свою форму (Поиск _target_path)
- Страница безопасности в справочнике