Стоит отметить, что в данном случае рекомендуется использовать только один межсетевой экран с access_control для страницы входа. Зачем? Что бы вы сделали, если зарегистрированный пользователь пытается получить доступ к странице / login? Вы не сможете проверить в контроллере, аутентифицирован ли он, и перенаправить его, потому что пользователь будет аутентифицирован на вашем основном брандмауэре, но не на брандмауэре входа в систему, поскольку они являются отдельными системами безопасности.
Вот файл security.yml, который отлично работает для меня:
security:
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: true
anonymous: ~
secured_area:
pattern: ^/
anonymous: ~
form_login:
login_path: /login
check_path: /login_check
always_use_default_target_path: true
default_target_path: /
logout:
path: /logout
target: /
providers:
main:
entity: { class: Core\UserBundle\Entity\User, property: username }
access_control:
- { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/admin, roles: ROLE_SUPERADMIN }
- { path: ^/user, roles: ROLE_USER }
- { path: ^/, roles: IS_AUTHENTICATED_FULLY }