我想在控制器中做类似的事情来记录用户:
$user = $this->get('security.context')->getToken()->getUser();
$user->logOut();
Run Code Online (Sandbox Code Playgroud)
Cro*_*zin 75
Symfony2中的注销由所谓的logout处理程序处理,这只是一个lister,当URL匹配来自安全配置的模式时执行,即.如果让我们说URL,/logout
则执行此监听器.有两个内置注销处理程序:
你所要做的就是和最后一个一样.你可以通过简单地调用来实现它:
$this->get('security.context')->setToken(null);
$this->get('request')->getSession()->invalidate();
Run Code Online (Sandbox Code Playgroud)
$this->get('security.token_storage')->setToken(null);
$this->get('request')->getSession()->invalidate();
Run Code Online (Sandbox Code Playgroud)
这仅在记住我的功能被禁用时才有效.在其他情况下,用户将通过记住我的cookie以及下一个请求再次登录.
如果您使用记住我的功能,请考虑扩展的解决方案:https://stackoverflow.com/a/28828377/1056679
小智 11
使用户会话无效可能会导致一些不需要的结果.Symfony的防火墙有一个监听器,可以始终检查和刷新用户的令牌.您可能只是重定向到您在firewall.yml中指定的默认注销路由
在Controller中,您可以这样做:
$this->redirect( $this->generateUrl( 'your_logout_url' ) );
Run Code Online (Sandbox Code Playgroud)
如果您不知道注销路线的名称.你可以在控制台中查看它:
app/console router:match /logout
Run Code Online (Sandbox Code Playgroud)
此命令将为您提供所需的路径名称.
:)
我们必须在注销时将用户设置为匿名用户.然后我们可以
$token->getUser()->getRoles();
在控制器或{% if is_granted('ROLE_USER') %}
树枝模板中使用.
use Symfony\Component\Security\Core\Authentication\Token\AnonymousToken;
...
//$providerKey = $this->container->getParameter('fos_user.firewall_name');
$token = new AnonymousToken($providerKey, 'anon.');
$this->get('security.context')->setToken($token);
$this->get('request')->getSession()->invalidate();
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
42969 次 |
最近记录: |