Как отключить перенаправление после login_check в Symfony 2 - PullRequest
31 голосов
/ 29 ноября 2011

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

Ответы [ 2 ]

63 голосов
/ 29 ноября 2011

Создать обработчик аутентификации:

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

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

1 голос
/ 29 ноября 2011

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...