我实现了Symfony的安全组件如下:
$app['security.firewalls'] = array(
'unsecured_area' => array(
pattern' => new RequestMatcher('^/log(in|out).*', null, 'GET')
)
, 'secured_area' => array(
'pattern' => '.*',
'edir' => true,
'users' => $app['security.user_provider.custom'],
'switch_user' => array('parameter' => '_switch_user', 'role' => 'ROLE_ALLOWED_TO_SWITCH')
)
);
当我呼叫退出路线时,我只是使会话无效。
据我所知,安全上下文存储在会话中,注销我的用户就足够了。但是他没有退出。
如果我更新我的防火墙,将注销路由放入安全区域,$session->invalidate()
工作正常,用户已注销......
为什么它在不安全的区域不起作用?不安全的区域并不意味着没有会话区域吗?
答案 0 :(得分:2)
简单地说,在一个不安全的区域,Symfony2使用它所谓的AnonymousToken,即使它的活动会话没有填充用户凭据。
因此,您的用户无法注销,因为他不处于登录状态,用户信息不在令牌或会话中。
希望有所帮助