2013-11-20 92 views
5

我想强制用户在登录symfony2后,检查它没有足够的权限访问特定的安全区域。如何强制用户注销symfony2

我已经试过:

$this->get('request')->getSession()->invalidate(); 

但似乎出了问题,用户仍然登录,直到我登录他出去使用/注销路线。

我不得不提到,我使用KayueWordpressBundle将我的symfony应用程序与基于wordpress的网站连接起来,以创建一个自定义后台。

这里是我的security.yml文件

security: 
firewalls: 
    dev: 
     pattern: ^/(_(profiler|wdt)|css|images|js)/ 
     security: false 
    login_firewall: 
     pattern: ^/$ 
     anonymous: ~ 
    secured_area: 
     pattern: ^/ 
     kayue_wordpress: ~ 
     form_login: 
      check_path: /login_check 
      login_path:/
     logout: 
      path: /logout 
      target:/
access_control: 
    - { path: ^/admin, roles: ROLE_ADMIN } 

providers: 
    wordpress: 
     entity: { class: Kayue\WordpressBundle\Entity\User, property: username } 

encoders: 
    Kayue\WordpressBundle\Entity\User: 
     id: kayue_wordpress.security.encoder.phpass 

我怎么能这样做吗?

谢谢

+0

的可能重复[Symfony2的:如何在控制了手动登录用户](http://stackoverflow.com/questions/6464754/ symfony2-how-to-log-user-out-manually-in-controller) –

回答

20

你可以通过调用setToken()null强制注销,尝试这样的事情:

$this->container->get('security.context')->setToken(null); 

它将从安全环境破坏用户令牌和踢用户退出。


另外,请参阅这个问题的更多细节:Symfony2: how to log user out manually in controller?

+0

谢谢你对我有效:) –

+0

给定的解决方案不会调用注销处理程序,如果我注册了任何注销处理程序。 – Jaimin

+1

顺便说一句,使用'$ this-> container-> get('security.authorization_checker')'代替(新的2.6) – Ronan