我需要在用户成功登录后执行一组操作。这包括从数据库加载数据并将其存储在会话中。
实现这一点的最佳方法是什么?
您可以添加一个监听器security.interactive_login
event.
像这样附加你的听众。在此示例中,我还将安全上下文和会话作为依赖项传递。
Note:SecurityContext 从 Symfony 2.6 开始已被弃用。请参阅http://symfony.com/blog/new-in-symfony-2-6-security-component-improvements 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);
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)