簡體   English   中英

Symfony2:成功登錄事件后,執行一組操作

[英]Symfony2: After successful login event, perform set of actions

我需要在用戶成功登錄后執行一系列操作。這包括從數據庫加載數據並將其存儲在會話中。

實現這個的最佳方法是什么?

您可以向security.interactive_login事件添加偵聽器。

像這樣附上你的聽眾。 在此示例中,我還將安全上下文和會話作為依賴項傳遞。

注意:從Symfony 2.6開始,不推薦使用SecurityContext。 請參閱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 }

在你的聽眾中,你可以在會話中存儲你想要的任何內容。 在這種情況下,我設置用戶時區。

<?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);
   }

}

您甚至可以從事件本身獲取用戶實例,無需注入令牌存儲!

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM