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

时间:2015-02-08 23:28:13

标签: php symfony login

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

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

搜索该网站,在我看来使用EventListener等有点沉重。其他较轻的替代品?

1 个答案:

答案 0 :(得分:2)

您可以实施成功案件。

  1. 编写一个实现AuthenticationSuccessHandlerInterface
  2. 的类
  3. 将其定义为服务(您可以注入其他服务,例如doctrine 或者安全上下文,在你的情况下是Session)
  4. 在安全配置中添加处理程序服务,如:

    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以获取完整示例,并查看所有symfony2安全配置选项的reference doc(您也可以配置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();
    
    
        }
    

    希望这个帮助