2015-02-08 50 views
2

在这种情况下,成功登录后,我需要将用户的登录时间更新到基础表中。登录后的Symfony 2做了一些额外的工作

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

搜索该网站,似乎我使用EventListener等是有点沉重。其他更轻的选择?

+0

没有用事件侦听器。这是最好的方法。 – Aitch 2015-02-08 23:38:04

+0

重复http://stackoverflow.com/questions/11180351/symfony2-after-successful-login-event-perform-set-of-actions – Aitch 2015-02-08 23:39:00

回答

2

您可以实施成功手杖。

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

检查this作为一个完整的例子和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(); 


    } 

希望这有助于

+0

这应该是处理登录成功/失败的方式。 – 2015-02-09 07:13:39

+0

Hi @TaylorR如果这个或任何答案已经解决了您的问题,请点击复选标记考虑[接受它](http://meta.stackexchange.com/q/5234/179419)。这向更广泛的社区表明,您已经找到了解决方案,并为答复者和您自己提供了一些声誉。没有义务这样做。 – Matteo 2015-03-17 09:12:47