В настоящее время я использую комбинацию действий контроллера (для обработки успешного ответа)
Я предполагаю, что это что-то вроде
/**
* @Route("/me/")
*/
public function meAction(): JsonResponse
{
return new JsonResponse([
'authenticated' => $this->getUser() !== null,
]);
}
событиеподписчик (для предотвращения перенаправления на форму входа, если пользователь пытается получить доступ к действию контроллера, когда он не вошел в систему)
Вы можете просто добавить следующую строку в свой security.yml
access_control
- { path: ^/me/$, role: IS_AUTHENTICATED_ANONYMOUSLY }
Обязательно добавьте его перед любыми другими проверками доступа, это скажет брандмауэру разрешить анонимный доступ для этого пути.
Также убедитесь, что анонимный доступ включен для вашего брандмауэра
firewalls:
secured_area:
anonymous: true
Если вы не хотите разрешать анонимный доступ
, нет ничего плохого в том, чтобы иметь anonymous: true
, но если по какой-то причине вы не хотите его разрешать и все же избегаете перенаправления - вы можете реализоватьпользовательский Точка входа
class XhrAuthenticationEntryPoint implements AuthenticationEntryPointInterface
{
/**
* {@inheritdoc}
*/
public function start(Request $request, AuthenticationException $authException = null)
{
return new JsonResponse(
['authenticated' => false],
200 // can be 200 or 401 up to you.
);
}
}
, а затем добавьте его в свои конфиги
// services.yml
Security\XhrAuthenticationEntryPoint: ~
// security.yml
firewalls:
secured_area:
entry_point: Security\XhrAuthenticationEntryPoint