Обработчик успеха не работает после входа в Symfony2

Цель состоит в том, чтобы что-то сделать после успешной аутентификации в Symfony2.

Для этого я продлил AuthenticationSuccessHandlerInterface создание службы для входа в форму, чтобы она была обработчиком успеха.

Вот брандмауэр в файле security.yml (где объявлен обработчик успеха):

firewalls:
main:
pattern: ^/
form_login:
check_path: fos_user_security_check
provider: fos_userbundle
csrf_provider: form.csrf_provider
success_handler: foo_user.component.authentication.handler.login_success_handler
logout:       true
anonymous:    true

Здесь LoginSuccessHandler сервис (создается в UserBundle):

namespace Foo\UserBundle\Component\Authentication\Handler;

use Symfony\Component\Security\Http\Authentication\AuthenticationSuccessHandlerInterface;
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
use Symfony\Component\Security\Core\SecurityContext;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\Routing\Router;

class LoginSuccessHandler implements AuthenticationSuccessHandlerInterface
{

protected $router;
protected $security;

public function __construct(Router $router, SecurityContext $security)
{
$this->router = $router;
$this->security = $security;
}

public function onAuthenticationSuccess(Request $request, TokenInterface $token)
{
$referer_url = $request->headers->get('referer');
$response = new RedirectResponse($referer_url);

return $response;
}
}

А вот services.xml из UserBundle:

<?xml version="1.0" encoding="utf-8"?>

<container xmlns="http://symfony.com/schema/dic/services"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://symfony.com/schema/dic/services
http://symfony.com/schema/dic/services/services-1.0.xsd">
<parameters>
<parameter key="foo_user.component.authentication.handler.login_success_handler.class">
Foo\UserBundle\Component\Authentication\Handler\LoginSuccessHandler
</parameter>
</parameters>
<services>
<service id="foo_user.component.authentication.handler.login_success_handler"class="%foo_user.component.authentication.handler.login_success_handler.class%">
<tag name="monolog.logger" channel="security"/>
<argument type="service" id="router"/>
<argument type="service" id="security.context"/>
<argument type="service" id="service_container"/>
</service>
</services>
</container>

LoginSuccessHandler конструктор вызывается, и я не получаю сообщений об ошибках.

У меня проблема в том, что onAuthenticationSuccess не вызывается после успешного входа в систему. Может быть, я что-то упустил?

2

Решение

В моих рабочих решениях я реализую метод onSecurityInteractiveLogin в моем слушателе как:

public function onSecurityInteractiveLogin(InteractiveLoginEvent $event)
{
$user = $event->getAuthenticationToken()->getUser();
}

Попробуйте реализовать этот метод тоже.

У меня есть ваша идентичная конфигурация (security.yml и определение сервиса), но я не использую fosuserbunde.

надеюсь, это поможет

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]