我的问题是捕获用户注销.我所拥有的代码是:
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'));
}
Run Code Online (Sandbox Code Playgroud)
问题是,TokenInterface当您运行注销功能时,我无法访问用户令牌?
tes*_*nes 12
要获取令牌,您必须注入安全上下文.
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;
}
}
Run Code Online (Sandbox Code Playgroud)
2.然后在service.yml中添加以下行:
....
logout_listener:
class: Yourproject\Yourbundle\Services\LogoutListener
arguments: [@security.context]
Run Code Online (Sandbox Code Playgroud)
就是这样,可能会有所帮助.
请参阅http://symfony.com/doc/current/reference/configuration/security.html
security.yml
secured_area:
logout:
path: /logout
**success_handler: logout_listener**
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7620 次 |
| 最近记录: |