В моем symfony веб-приложении должен быть раздел администратора, защищенный аутентификатором (AdminAuthenticator. php).
Я настроил этот раздел следующим образом в security.yaml:
security:
[...]
firewalls:
[...]
admin:
pattern: ^/admin/
guard:
authenticators:
- App\Security\AdminAuthenticator
logout:
path: admin_logout
# where to redirect after logout
target: front_home
[...]
access_control:
- { path: ^/admin/login$, roles: IS_AUTHENTICATED_ANONYMOUSLY }
Перенаправление на форму работает, но когда форма должна быть показана, я получаю этот журнал:
Apr 17 14:57:10 |DEBUG| PHP 127.0.0.1:37778 Accepted path="/usr/bin/php7.4" php="7.4.4"
Apr 17 14:57:10 |INFO | REQUES Matched route "admin_login". method="GET" request_uri="http://lolhub.local:50004/admin/login" route="admin_login" route_parameters={"_controller":"App\\Controller\\Admin\\LoginController::login","_route":"admin_login"}
Apr 17 14:57:10 |DEBUG| SECURI Checking for guard authentication credentials. authenticators=1 firewall_key="admin"
Apr 17 14:57:10 |DEBUG| SECURI Checking support on guard authenticator. authenticator="App\\Security\\AdminAuthenticator"
Apr 17 14:57:10 |DEBUG| SECURI Guard authenticator does not support the request.
Apr 17 14:57:10 |INFO | SECURI An AuthenticationException was thrown; redirecting to authentication entry point.
Apr 17 14:57:10 |DEBUG| SECURI Calling Authentication entry point.
Apr 17 14:57:10 |DEBUG| PHP 127.0.0.1:37778 Closing
Это маршруты:
admin_home_index ANY ANY ANY /admin/
admin_login ANY ANY ANY /admin/login
admin_logout ANY ANY ANY /admin/logout
И это часть AdminAuthenticator. php:
class AdminAuthenticator extends AbstractFormLoginAuthenticator implements PasswordAuthenticatedInterface
{
use TargetPathTrait;
public const LOGIN_ROUTE = 'admin_login';
[...]
public function supports(Request $request)
{
return self::LOGIN_ROUTE === $request->attributes->get('_route')
&& $request->isMethod('POST');
}
[...]
public function onAuthenticationSuccess(Request $request, TokenInterface $token, $providerKey)
{
if ($targetPath = $this->getTargetPath($request->getSession(), $providerKey)) {
return new RedirectResponse($targetPath);
}
return new RedirectResponse($this->urlGenerator->generate('admin_home_index'));
// For example : return new RedirectResponse($this->urlGenerator->generate('some_route'));
// throw new \Exception('TODO: provide a valid redirect inside '.__FILE__);
}
[...]
}
Я думал, - { path: ^/admin/login$, roles: IS_AUTHENTICATED_ANONYMOUSLY }
не позволит брандмауэру заблокировать запрос формы входа.
Как я могу сказать symfony Не для того, чтобы обезопасить форму входа, чтобы я мог войти, прежде чем он проверит, аутентифицирован ли я?