Я полагаю, что проблема заключается в вашей конфигурации access_control.
Способ работы access_control заключается в том, что он останавливается на первой строке, которая соответствует пути, начиная с вершины ACL.
В вашем случае получается, что маршрут не совпадает с ^ / admin, поэтому он переходит на вторую строку и совпадает с ^ / и поэтому считает пользователя анонимным.
Я вижу два изменения, необходимые для исправления:
Во-первых, переместите свой ACL базового пути в последнюю позицию, поскольку он наименее ограничивающий, каждый URL будет соответствовать.
Этот
- { path: ^/, roles: IS_AUTHENTICATED_ANONYMOUSLY }
Во-вторых, когда роль ACL IS_AUTHENTICATED_ANONYMOUSLY, он будет загружать анонимный токен в сеансе пользователя, следовательно, не ожидаемый пользователь.
Окончательный результат для access_control будет:
access_control:
- { path: ^/admin, roles: [ROLE_ADMIN, ROLE_GESTIONNAIRE] }
- { path: ^/publication, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/publication/new, roles: ROLE_USER }
- { path: ^/comment, roles: ROLE_USER }
- { path: ^/login$, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/profile, roles: ROLE_USER }
- { path: ^/, roles: ROLE_USER }
Редактировать: Хорошо, я только что понял, что вы пытаетесь сделать так, чтобы ваша домашняя страница "^ /" была анонимной и аутентифицированной.
Вам также необходимо указать [ROLE_USER, IS_AUTHENTICATED_ANONYMOUSLY] внизу списка ACL.
Теперь с последними внесенными вами изменениями, возможно, вы будете перенаправлены на вход в систему после входа в систему.
Если вы загляните внутрь своего FormLoginAuthenticator на method onAuthenticationSuccess ()
Существует перенаправление с $ targetPath, которое имеет приоритет над домашней страницей.
//If $targetPAth == "/login", you're redirected to login, therefore an anonymous token.
if ( $targetPath = $this->getTargetPath($request->getSession(),$providerKey) )
{
return new RedirectResponse($targetPath);
}
Возможно, $ targetPath равен "/ login", который IS_AUTHENTICATED_ANONYMOUSLY в вашем ACL. Следовательно, при вводе маршрута "/ login" после входа в систему в сеанс вводится анонимный токен.
Если это не сработает, общий доступ к шаблону ветки формы входа в систему, а также к вашим маршрутам и их URL поможет много.