Для моего веб-сервиса, использующего FOSRestBundle, я создал брандмауэр, который принудительно входит в систему для доступа к приложению.
Моя проблема в том, что когда я делаю вызов API через ajax, мне нужно получить код ошибки 401, когда пользователь не аутентифицирован, а не получить исходный код html формы входа. Как настроить приложение?
secured_area:
pattern: ^/
form_login:
provider: fos_userbundle
use_forward: false
default_target_path: /w
logout:
path: /logout
target: /login
ИЗМЕНИТЬ:
Спасибо Райану, вот метод KernelExceptionListener.
public function onKernelException( GetResponseForExceptionEvent $event ) {
// get exception
$exception = $event->getException();
// get path
$path = $event->getRequest()->getPathInfo();
if ( $exception instanceOf AuthenticationException && ($event->getRequest()->isXmlHttpRequest() || strpos( $path, '/api' ) === 0) ) {
$response = new Response();
$response->setStatusCode( 401 );
$event->setResponse( $response );
$event->stopPropagation();
}
}