Проблема в том, что вы ограничили доступ к /.*
, что означает все пути, только для пользователей, имеющих роль ROLE_USER.
Скажите, что ваш путь входа в систему /login
, пользователь пытается получить доступ к любому другому пути и перенаправляется на путь входа в систему.Путь входа в систему (/login
) будет соответствовать шаблону контроля доступа /.*
.В этом случае пользователю будет отказано в доступе, потому что у него нет роли ROLE_USER прямо сейчас.Компонент безопасности снова перенаправит пользователя в форму входа, чтобы он мог пройти проверку подлинности, чтобы получить роль, которая ограничена, и перенаправит пользователя в форму входа для проверки подлинности и т. Д.
Вот простое решениечтобы избежать этой проблемы.Вы можете разрешить доступ к форме входа анонимному пользователю с помощью активации конфигурации анонимного пользователя и нового элемента управления доступом.Добавьте это ниже main
в конфигурации firewalls
, чтобы включить анонимного пользователя:
security:
firewalls:
main:
anonymous: true
И добавьте новый элемент управления доступом, чтобы позволить анонимному пользователю получить доступ к шаблону /login
:
access_control:
- { path: /login, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: /.*, role: ROLE_USER }
Здесь важен порядок, поскольку правило таково: выигрывается первый путь.Таким образом, путь /login
должен быть выше вашего шаблона для другого пути /.*
.Это должно разрешить вам цикл перенаправления.
Документация Symfony о безопасности переписывается прямо сейчас и расскажет подробнее об этой проблеме.Он находится в репозитории symfony-docs github в ветке security .
С уважением, Мэтт