Брандмауэр Symfony2 и FOSRestBundle

Для моего веб-сервиса, использующего 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();
    }
}

person Frank6    schedule 25.03.2013    source источник
comment
Рад, что у тебя получилось. Я начал новый выпуск FOSRestBundle #411, который, надеюсь, предоставит эту функциональность как часть пакета. github.com/FriendsOfSymfony/FOSRestBundle/issues/411   -  person Ryan    schedule 27.03.2013


Ответы (1)


Вы использовали слово аутентификация, а не авторизация, и, к сожалению, это еще не написано. Поэтому вам, вероятно, потребуется создать свой собственный.

В общем случае простой прослушиватель событий ядра для перехвата AuthenticationException. Захват этого события должен позволить вам выполнить любое действие до перенаправления на страницу входа.

FOSRestBundle должен служить хорошим примером того, как это сделать. В настоящее время FOSRestBundle предоставляет эту функциональность для уровня авторизации (AccessDeniedException< /а>). С небольшой модификацией тот же фреймворк должен предоставлять возможность сделать то же самое и для уровня аутентификации.

См. pull #308 для получения набора изменений, который предоставляет прослушиватели авторизации. См. Прослушиватель исключений безопасности для документации по настройке слушателей.

person Ryan    schedule 26.03.2013