Symfony2: After successful login event, perform set of actions

前端 未结 2 2149
南方客
南方客 2020-11-29 05:20

I need to perform a set of actions after a user successfully logs in. This includes loading data from the database and storing it in the session.

What is the best ap

相关标签:
2条回答
  • 2020-11-29 05:46

    You can even fetch the user instance from the event itself, no need to inject the token storage!

    public function onSecurityInteractiveLogin(InteractiveLoginEvent $event)
    {
        $event->getAuthenticationToken()->getUser()
    }
    
    0 讨论(0)
  • 2020-11-29 05:58

    You can add a listener to the security.interactive_login event.

    attach your listener like so. In this example I also pass the security context and session as dependencies.

    Note: SecurityContext is deprecated as of Symfony 2.6. Please refer to http://symfony.com/blog/new-in-symfony-2-6-security-component-improvements

    parameters:
       # ...
    
       account.security_listener.class: Company\AccountBundle\Listener\SecurityListener
    
    services:
       # ...
    
       account.security_listener:
            class: %account.security_listener.class%
            arguments: ['@security.context', '@session']
            tags:
                - { name: kernel.event_listener, event: security.interactive_login, method: onSecurityInteractiveLogin }
    

    and in your listener you can store whatever you want on the session. In this case I set the users timezone.

    <?php
    
    namespace Company\AccountBundle\Listener;
    
    use Symfony\Component\Security\Core\SecurityContextInterface;
    use Symfony\Component\HttpFoundation\Session\Session;
    use Symfony\Component\Security\Http\Event\InteractiveLoginEvent;
    
    class SecurityListener
    {
    
       public function __construct(SecurityContextInterface $security, Session $session)
       {
          $this->security = $security;
          $this->session = $session;
       }
    
       public function onSecurityInteractiveLogin(InteractiveLoginEvent $event)
       {
            $timezone = $this->security->getToken()->getUser()->getTimezone();
            if (empty($timezone)) {
                $timezone = 'UTC';
            }
            $this->session->set('timezone', $timezone);
       }
    
    }
    
    0 讨论(0)
提交回复
热议问题