在我的Symfony2
项目中,我有一个logout
按钮,该按钮会重定向到索引页面,但是当我点击Login
按钮时,它会直接连接,而不会询问我user
和password
。
如何验证所有session attributes
,如果再次login
我应该问我user
和password
这是我的logout
行动:
public function logoutAction(Request $request)
{
$this->get('security.context')->setToken(null);
$this->get('request')->getSession()->invalidate();
$url = $this->generateUrl('my_route');
$response = new RedirectResponse($url);
$response->headers->clearCookie('PHPSESSID');
$response->send();
return $response;
}
这是 security.yml :
security:
encoders:
Envivio\UserBundle\Entity\User: sha512
role_hierarchy:
ROLE_USER: ROLE_USER
ROLE_ADMIN: ROLE_USER
ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH ]
providers:
mine:
id: ib_user.oauth_user_provider
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
main:
anonymous: true
pattern: ^/
oauth:
resource_owners:
salesforce: "/login/check-salesforce"
login_path: /login
#use_forward: false
failure_path: /login
default_target_path: /upload
oauth_user_provider:
service: ib_user.oauth_user_provider
remember_me:
key: "%secret%"
access_control:
- { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/admin, role: ROLE_ADMIN }
答案 0 :(得分:1)
您可以尝试:
$this->get('session')->clear();
或
$session = $this->get('session');
$ses_vars = $session->all();
foreach ($var as $key => $value) {
$session->remove($key);
}
也可能是Cookie问题,请在answer->标题中检查您的Cookie,然后尝试使用该功能清除它:
由于你记得我启用你需要清除那个cookie,否则你做的下一个请求将重新认证用户,你可以指定cookie的名称:
#security.yml
remember_me:
name: "%session.remember_me.name%"
在parameters.yml中添加cookie的名称
parameters:
session.remember_me.name: EXTSESS
然后在您的控制器注销操作中:
$response = $this->redirectToRoute('homepageroute'); //redirect prepare the route to redirect
$this->get('security.context')->setToken(null);
$this->get('request')->getSession()->invalidate();
$remember_sess_name = $this->container->getParameter('session.remember_me.name');
$response->headers->clearCookie($remember_sess_name);
return $response;
现在应该可以了。如果这不是ALT + F4:D
答案 1 :(得分:0)
您无需手动执行此操作。 Symfony2防火墙可以执行以下注销:
# app/config/security.yml security: firewalls: secured_area: # ... logout: path: /logout target: / # ...
接下来,您需要为此网址创建路由(但不是 控制器):
# app/config/routing.yml logout: path: /logout
就是这样!通过将用户发送到/ logout(或您配置的任何内容) ()的路径,Symfony将取消当前用户的身份验证。
一旦用户退出,他们将被重定向到任何东西 路径由上面的目标参数(例如主页)定义。
指向相关文档的链接:http://symfony.com/doc/current/book/security.html#logout