在这种情况下,成功登录后,我需要将用户的登录时间更新到底层表中。
User实体当前实现了UserInterface
,并且运行良好。只是想添加一些额外的代码来记录用户的登录日期和时间。
搜索了这个网站,在我看来使用EventListener等有点重。其他更轻的替代品?
您可以实现一个Success Hander。
- 编写一个实现
AuthenticationSuccessHandlerInterface
的类: - 将其定义为服务(您可以注入其他服务,如条令或安全上下文,在您的情况下为会话)
在安全配置中添加处理程序服务,如:
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();
}
希望这能帮助