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

Symfony 2 after login do some extra job

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

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

搜索该站点,在我看来使用 EventListener 等有点繁琐。其他更轻的替代品?

您可以实施成功处理程序。

  1. 写一个 class 实现 AuthenticationSuccessHandlerInterface:
  2. 将其定义为一个服务(你可以注入其他服务,比如 doctrine 或安全上下文,在您的情况下是 Session)

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

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: /

检查 this for a complete example and the reference doc 以获取所有 symfony2 安全配置选项(您也可以配置 failure_handler)。

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

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();


    }

希望对您有所帮助