2013-09-13 2 views
6

Это мое первое приложение Symfony 2, и я пытаюсь выйти из текущего пользователя.Symfony 2 Logout

Это мое приложение/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 } 

Я создал запись выхода из системы в routing.yml, как описано в документации по обеспечению Symfony:

logout: 
    path: /logout 

Когда я создать ссылку на «выход из системы», я переадресовываюсь в «/», что хорошо. Но пользователь все еще аутентифицирован, означает, что фактический выход из системы не работает.

ответ

11

Он не работает с базовой аутентификацией HTTP, поскольку браузер запоминает ваши учетные данные и отправляет их с каждым запросом. Вы ничего не можете сделать на стороне сервера.

Я верю, что в конце концов вы перейдете на form based login. Функция выхода из системы будет работать так, как предполагается, когда вы это сделаете.

+0

Хорошо спасибо, тогда я переключусь на регистрационную форму. – CBergau

5

Просто используйте это в security.yml

logout: 
     path: /logout 
     invalidate_session: false 
0

Если как я вы новичок в Symfony и не смогли сделать другие решения выхода из системы работы (я полагаю, я пропустил некоторые конфигурации subtilities), есть не академическое, но функциональное решение:

при использовании 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> 

, визуализируя 'выход' шаблон из контроллера:

<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>