Symfony 2在登录后做一些额外的工作


Symfony 2 after login do some extra job

在这种情况下,成功登录后,我需要将用户的登录时间更新到底层表中。

User实体当前实现了UserInterface,并且运行良好。只是想添加一些额外的代码来记录用户的登录日期和时间。

搜索了这个网站,在我看来使用EventListener等有点重。其他更轻的替代品?

您可以实现一个Success Hander。

  1. 编写一个实现AuthenticationSuccessHandlerInterface的类:
  2. 将其定义为服务(您可以注入其他服务,如条令或安全上下文,在您的情况下为会话)

在安全配置中添加处理程序服务,如:

firewalls:
dev:
    pattern:  ^/(_(profiler|wdt)|css|images|js)/
    security: false
secured_area:
    pattern:   ^/
    anonymous: ~
    form_login:
        login_path:  login
        check_path:  login_check
        success_handler: some.service.id
    logout:
        path: logout
        target: /

查看完整的示例和所有symfony2安全配置选项的参考文档(您也可以配置failure_handler)。

在我的工作解决方案中,我在侦听器中实现了SecurityInteractiveLogin的方法:

public function onSecurityInteractiveLogin(InteractiveLoginEvent $event) 
    {
        $user = $event->getAuthenticationToken()->getUser();
        $user->setLastLogin(new 'Datetime());
        // Entity manager injected by container in the service definition
        $this->em->persist($user); 
        $this->em->flush();

    }

希望这能帮助