登录后 Symfony 2 做一些额外的工作
Symfony 2 after login do some extra job
在这种情况下,登录成功后,我需要将用户的登录时间更新到底层table。
用户实体目前实现 UserInterface
并且运行良好。只想添加一些额外的代码来记录用户的登录日期时间。
搜索该站点,在我看来使用 EventListener 等有点繁琐。其他更轻的替代品?
您可以实施成功处理程序。
- 写一个 class 实现
AuthenticationSuccessHandlerInterface
:
- 将其定义为一个服务(你可以注入其他服务,比如 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();
}
希望对您有所帮助
在这种情况下,登录成功后,我需要将用户的登录时间更新到底层table。
用户实体目前实现 UserInterface
并且运行良好。只想添加一些额外的代码来记录用户的登录日期时间。
搜索该站点,在我看来使用 EventListener 等有点繁琐。其他更轻的替代品?
您可以实施成功处理程序。
- 写一个 class 实现
AuthenticationSuccessHandlerInterface
: - 将其定义为一个服务(你可以注入其他服务,比如 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();
}
希望对您有所帮助