Symfony2:成功登录事件后,执行一组操作

用户成功登录后,我需要执行一组操作。这包括从数据库加载数据并将其存储在会话中。

实现此目的的最佳方法是什么?

回答:

您可以向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);

}

}

以上是 Symfony2:成功登录事件后,执行一组操作 的全部内容, 来源链接: utcz.com/qa/397971.html

回到顶部