我有一个简单的SecurityBundle,它遵循我创建的symfony.com文档:
- 实现
UserProviderInterface
的UserRepository - 实现
UserInterface
和EquatableInterface
的UserEntity - 具有
loginAction
的SecurityController - 使用登录、login_check和注销路由设置路由
- 设置我的防火墙设置
public function loginAction()
{
$request = $this->getRequest();
$session = $request->getSession();
if ($request->attributes->has(SecurityContext::AUTHENTICATION_ERROR)) {
$error = $request->attributes->get(SecurityContext::AUTHENTICATION_ERROR);
} else {
$error = $session->get(SecurityContext::AUTHENTICATION_ERROR);
$session->remove(SecurityContext::AUTHENTICATION_ERROR);
}
return $this->render('MySecurityBundle:Security:login.html.twig', array(
'last_username' => $session->get(SecurityContext::LAST_USERNAME),
'error' => $error,
));
}
一切都还可以,但我需要为用户的每个操作添加一个记录器,例如:USER:username, DO:erase file XXXXX, AT:2013-08-08.15-03-43
问题是我无法控制注销、登录操作,因为防火墙捕捉到了这些,我不知道如何修改
登录事件可以被security.interactive_login
事件捕获。请阅读此处。
对于注销,需要在注销防火墙中指定自己的success_handler
。请阅读此处。登录也可以这样做。
firewalls:
main:
form_login:
failure_handler: mybundle.security.handler.failure
success_handler:mybundle.security.handler.success
logout:
success_handler: mybundle.security.handler.logout