symfony2 注销
Posted
技术标签:
【中文标题】symfony2 注销【英文标题】:symfony2 logout 【发布时间】:2012-09-26 10:19:54 【问题描述】:我的问题是捕获用户注销。我拥有的代码是:
public function onAuthenticationFailure(Request $request, AuthenticationException $exception)
return new Response($this->translator->trans($exception->getMessage()));
public function logout(Request $request, Response $response, TokenInterface $token)
$empleado = $token->getUser();
$log = new Log();
$log->setFechalog(new \DateTime('now'));
$log->setTipo("Out");
$log->setEntidad("");
$log->setEmpleado($empleado);
$this->em->persist($log);
$this->em->flush();
public function onLogoutSuccess(Request $request)
return new RedirectResponse($this->router->generate('login'));
问题是我在运行注销功能时无法访问用户令牌TokenInterface
?
【问题讨论】:
解决问题是服务安全上下文谢谢。$token->getUser()
是否返回空值?还是 $token
为空?
【参考方案1】:
要获取令牌,您必须注入安全上下文。
1.创建类 Logout 侦听器,如下所示:
namespace Yourproject\Yourbundle\Services;
...
use Symfony\Component\Security\Http\Logout\LogoutSuccessHandlerInterface;
use Symfony\Component\Security\Core\SecurityContext;
class LogoutListener implements LogoutSuccessHandlerInterface
private $security;
public function __construct(SecurityContext $security)
$this->security = $security;
public function onLogoutSuccess(Request $request)
$user = $this->security->getToken()->getUser();
//add code to handle $user here
//...
$response = RedirectResponse($this->router->generate('login'));
return $response;
2。然后在 service.yml 中,添加这一行:
....
logout_listener:
class: Yourproject\Yourbundle\Services\LogoutListener
arguments: [@security.context]
就是这样,希望对你有帮助。
【讨论】:
这不起作用,对于 logout_listener 服务,您没有定义的事件。所以听者根本不会被解雇。 @artworkadshi,我已经在 service.yml 上注册了这个事件,所以当用户注销时它会被触发。我在几个项目交响乐上都用过这个,没有问题。 在我看来,有必要在 2014 年 7 月 24 日 15:22 的答案中添加 ALSO 行。它在 symfony 2.5 中对我有用。 在 Symfony 3 中你必须使用['@security.authorization_checker']
而不是 security.context
【参考方案2】:
见http://symfony.com/doc/current/reference/configuration/security.html
security.yml
secured_area:
logout:
path: /logout
**success_handler: logout_listener**
【讨论】:
【参考方案3】:看看这里是否可以覆盖捆绑包的任何控制器:
http://symfony.com/doc/current/cookbook/bundles/inheritance.html
【讨论】:
以上是关于symfony2 注销的主要内容,如果未能解决你的问题,请参考以下文章
Symfony2 注销 CSRF 保护:csrf_provider 无法识别
启用“记住我”时,在 Symfony 2 应用程序中注销用户