Для моего веб-сервиса с использованием FOSRestBundle я создал брандмауэр, который заставляет логин получать доступ к приложению.Брандмауэр Symfony2 и 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
EDIT:
Благодаря Райан здесь метод 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();
}
}
Рад, что у вас это работает. Я начал новую проблему с FOSRestBundle # 411, которая, надеюсь, предоставит эту функциональность в составе пакета. https://github.com/FriendsOfSymfony/FOSRestBundle/issues/411 – Ryan