这是我的第一个Symfony 2应用程序,我正在尝试注销当前登录的用户。
这是我的app / config / security.yml
security:
encoders:
Symfony\Component\Security\Core\User\User: plaintext
role_hierarchy:
ROLE_ADMIN: ROLE_USER
ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]
providers:
in_memory:
memory:
users:
user0: { password: user0, roles: [ 'ROLE_ADMIN' ] }
user1: { password: user1, roles: [ 'ROLE_SUPER_ADMIN' ] }
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
login:
pattern: ^/demo/secured/login$
security: false
secured_area:
pattern: ^/
logout: ~
anonymous: ~
http_basic:
realm: "Secured Area"
access_control:
- { path: ^/question/*, roles: ROLE_ADMIN }
- { path: ^/questiongroup/*, roles: ROLE_ADMIN }
- { path: ^/answer/*, roles: ROLE_ADMIN }
- { path: ^/newslettertemplate/*, roles: ROLE_ADMIN }
- { path: ^/customer/*, roles: ROLE_SUPER_ADMIN }
- { path: ^/statistics/*, roles: ROLE_SUPER_ADMIN }
我已经在route.yml中创建了logout条目,如symfony安全文档中所述:
logout:
path: /logout
当我创建一个指向“注销”的链接时,我会被重定向到“/”,这是可以的。但是用户仍然经过身份验证,这意味着实际的注销无效。
答案 0 :(得分:11)
它不适用于HTTP基本身份验证,因为浏览器会记住您的凭据并随每个请求一起发送。你无法在服务器端对此做任何事情。
我相信你最终会切换到form based login。注销功能将像你应该的那样工作。
答案 1 :(得分:5)
只需在security.yml
中使用它logout:
path: /logout
invalidate_session: false
答案 2 :(得分:0)
如果像我一样你是symfony的新手并且无法让其他人注销解决方案(我想我错过了一些配置子实体), 有一个非学术性但功能性的解决方案:
当您使用form based login时,您只需将未定义的登录和密码发送到“login_check”路线。
例如:登录 ='*'密码 =''
使用模板中的按钮:
<form action="{{ url('login_check') }}" method="post">
<input type="text" name="_username" value="*" style="display:none;" />
<input type="password" name="_password" style="display:none;" />
<button type="submit">log out</button>
</form>
通过从Controller渲染“注销”模板:
<script>
window.addEventListener("load",function(){
document.getElementById("logout_form").submit();
});
</script>
<form action="{{ url('login_check') }}" method="post" id="logout_form">
<input type="text" name="_username" value="*" style="display:none;" />
<input type="password" name="_password" style="display:none;" />
</form>