[英]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.