Подтвердить что ты не робот

Как отключить перенаправление после login_check в Symfony 2

Мне нужно отключить перенаправление после проверки входа, потому что мне нужно получить только то, что логин был успешным или нет. После отправки /login _check url дайте мне нужные данные, но продолжайте перенаправление на /login (при сбое).
/логин пуст после этого.
Я пытаюсь настроить форму входа с помощью extjs 4, поэтому мне нужно проверить прокси-запрос 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
4b9b3361

Ответ 1

Создайте обработчик проверки подлинности:

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

Это пример, чтобы дать вам общую идею - вам нужно будет выяснить детали самостоятельно. Если вы застряли и нуждаетесь в дополнительных разъяснениях, задайте свои вопросы в комментариях, и я попытаюсь привести пример.

Ответ 2

Нормальный поток symfony - перенаправить вас на страницу входа в систему, если вы не вошли в систему, что отлично подходит для людей. Но вы, похоже, ищете программное решение.

Вы пытались установить _target_path в своей форме, чтобы объявить, что должна быть "следующая страница"? Symfony всегда будет перенаправлять вас куда-то, но вы можете установить это где угодно куда угодно.

Я нашел эти две страницы полезными для описания внутренней работы формы входа: