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

StackOverflow https://stackoverflow.com/questions/8308050

  •  25-10-2019
  •  | 
  •  

Вопрос

Мне нужно отключить перенаправление после проверки входа в систему, потому что мне нужно получить только то, что логин был успешным или нет. После 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 всегда собирается переслать вас куда -то, но вы можете установить это куда угодно, где захотите.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top