Здравствуйте. Есть два правила firewall:
login и
main
security.yaml
firewalls:
login:
lazy: true
login_throttling:
max_attempts: 3
pattern: ^/api/login
custom_authenticator: App\Security\CustomAuthenticator
provider: app_user_provider
json_login:
username_path: email
password_path: password
check_path: api_login
main:
login_throttling:
max_attempts: 3
lazy: true
provider: app_user_provider
custom_authenticator: App\Security\CustomAuthenticator
json_login:
check_path: api_login
username_path: email
password_path: password
ApiController
#[Route('/login', name: 'login', methods: ['POST'])]
public function login(#[CurrentUser] ?User $user): Response
{
if (null === $user) {
return $this->json([
'message' => 'missing credentials',
], Response::HTTP_UNAUTHORIZED);
}
return $this->json(['user' => $user->getUserIdentifier()]);
}
Если убрать правило login, и пускать авторизацию через main, то после отправки запроса я авторизован на сайте. Если же пускать запрос через правило login, то в дебагере так же видно, что я авторизован, но после обновления страницы я снова не авторизован.
Я решил сравнить создаваемые сессии, что в них хранится:
login_sf2_attributes|a:1:{s:15:"_security_login";s:512:"O:74:"Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken":3:{i:0;N;i:1;s:5:"login";i:2;a:5:{i:0;O:15:"App\Entity\User":5:{s:19:"App\Entity\Userid";i:1;s:22:"App\Entity\Useremail";s:20:"admin@localhost.ru";s:22:"App\Entity\Userroles";a:1:{i:0;s:10:"ROLE_ADMIN";}s:25:"App\Entity\Userpassword";s:60:"$2y$13$WLWZckjG9pJtI9wxC5VA8.n1x90tH.qnEmIaffzZSn.V17cuvpG/m";s:27:"App\Entity\UserisVerified";b:1;}i:1;b:1;i:2;N;i:3;a:0:{}i:4;a:2:{i:0;s:10:"ROLE_ADMIN";i:1;s:9:"ROLE_USER";}}}";}_sf2_meta|a:3:{s:1:"u";i:1672638803;s:1:"c";i:1672638788;s:1:"l";i:604800;}
main_sf2_attributes|a:2:{s:15:"_security_login";s:512:"O:74:"Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken":3:{i:0;N;i:1;s:5:"login";i:2;a:5:{i:0;O:15:"App\Entity\User":5:{s:19:"App\Entity\Userid";i:1;s:22:"App\Entity\Useremail";s:20:"admin@localhost.ru";s:22:"App\Entity\Userroles";a:1:{i:0;s:10:"ROLE_ADMIN";}s:25:"App\Entity\Userpassword";s:60:"$2y$13$WLWZckjG9pJtIJwxC5VA8.n1x90tH.qnEmIaffzZSn.V17cuvpG/m";s:27:"App\Entity\UserisVerified";b:1;}i:1;b:1;i:2;N;i:3;a:0:{}i:4;a:2:{i:0;s:10:"ROLE_ADMIN";i:1;s:9:"ROLE_USER";}}}";s:14:"_security_main";s:511:"O:74:"Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken":3:{i:0;N;i:1;s:4:"main";i:2;a:5:{i:0;O:15:"App\Entity\User":5:{s:19:"App\Entity\Userid";i:1;s:22:"App\Entity\Useremail";s:20:"admin@localhost.ru";s:22:"App\Entity\Userroles";a:1:{i:0;s:10:"ROLE_ADMIN";}s:25:"App\Entity\Userpassword";s:60:"$2y$13$WLWZckjG9pJtIJwxC5VA8.n1x90tH.qnEmIaffzZSn.V17cuvpG/m";s:27:"App\Entity\UserisVerified";b:1;}i:1;b:1;i:2;N;i:3;a:0:{}i:4;a:2:{i:0;s:10:"ROLE_ADMIN";i:1;s:9:"ROLE_USER";}}}";}_sf2_meta|a:3:{s:1:"u";i:1672638888;s:1:"c";i:1672638888;s:1:"l";i:604800;}
Разница в целой секции _security_main, которой нет, если авторизация идёт не через main. Что я упустил?
Видел похожий вопрос про ручную авторизацию, и токен _security_main добавлялся в сессию вручную. Для кастомных правил такого не видел, чтобы добавлялась эта секция