Я только недавно начал изучать symfony. Я не могу ограничить доступ авторизованных пользователей к способу входа в Symfony5. Он продолжает работать, несмотря на ограничения)) Это мой security.yaml:
security:
encoders:
App\Entity\User:
algorithm: auto
providers:
app_user_provider:
entity:
class: App\Entity\User
property: email
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
main:
pattern: ^/api
anonymous: lazy
guard:
authenticators:
- App\Security\LoginAuthenticator
- App\Security\JwtAuthenticator
entry_point: App\Security\LoginAuthenticator
user_checker: App\Security\UserChecker
logout:
path: api_user_logout
success_handler: App\Security\JwtLogoutHandler
delete_cookies:
jwt: { path: /, domain: / }
stateless: false
access_control:
- { path: '^/api/login', roles: IS_AUTHENTICATED_ANONYMOUSLY && !IS_AUTHENTICATED_FULLY }
Метод контроллера:
/**
* @Route("/login", name="login", methods={"POST"})
* @IsGranted("IS_AUTHENTICATED_ANONYMOUSLY && !IS_AUTHENTICATED_FULLY")
*/
public function login()
{
}
/**
* @Route("/logout", name="logout", methods={"GET"})
*/
public function logout()
{
}
/**
* @Route("/user", name="get_user", methods={"GET"})
* @IsGranted("ROLE_USER")
*/
public function getUserData()
{
return $this->json([
'user' => $this->getUser(),
],
Response::HTTP_OK,
[],
[
'groups' => ['api'],
]
);
}
access_control работает для всех, кроме входа в систему. @IsGranted ("IS_AUTHENTICATED_ANONYMOUSLY &&! IS_AUTHENTICATED_FULLY") также не работает для моего примера. Как ограничить авторизованным пользователям доступ к методам входа в систему?
ОБНОВЛЕНО (Казалось бы - доступ запрещен, но вход и выход из системы работают.):
security.yaml:
main:
pattern: ^/
anonymous: lazy
guard:
authenticators:
- App\Security\LoginAuthenticator
- App\Security\JwtAuthenticator
entry_point: App\Security\LoginAuthenticator
user_checker: App\Security\UserChecker
logout:
path: api_user_logout
success_handler: App\Security\JwtLogoutHandler
delete_cookies:
jwt: { path: /, domain: / }
stateless: true
access_control:
- { path: '^/', roles: [IS_AUTHENTICATED_FULLY] }
Контроллер:
/**
* @Route("/login", name="login", methods={"POST"})
* @Security("is_granted('ROLE_USER')", statusCode=403)
*/
public function login()
{
}
/**
* @Route("/logout", name="logout", methods={"GET"})
*/
public function logout()
{
}