Success handler not working after Symfony2 login

霸气de小男生 提交于 2019-12-24 03:43:07

问题


The goal is to do something after authentication success in Symfony2.

In order to do that I have extended AuthenticationSuccessHandlerInterface creating a service for the form login in order to be its success handler.

Here is the firewall in the security.yml file (where the success handler is declared):

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 

Here is the LoginSuccessHandler service (created in the 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;
    }
}

And here is the services.xml from the 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>

The LoginSuccessHandler constructor is being called and I'm getting no error messages.

The problem I'm having is that onAuthenticationSuccess isn't being called after login success. May be I'm missing something?


回答1:


In my working solutions I implements the method onSecurityInteractiveLogin in my listener as:

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

Try implementing this method too.

I have your identical configuration (security.yml and service definition) but i don't use fosuserbunde.

hope this help



来源:https://stackoverflow.com/questions/27826964/success-handler-not-working-after-symfony2-login

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!