FOSRestBundleを使用するWebサービスでは、ログインでアプリケーションにアクセスするように強制するファイアウォールを作成しました。
私の問題は、ajaxを介してAPIを呼び出すときに、ログインフォームのhtmlソースコードを受け取るのではなく、ユーザーが認証されていないときにエラーコード401を取得する必要があることです。アプリケーションを構成するにはどうすればよいですか?
secured_area:
pattern: ^/
form_login:
provider: fos_userbundle
use_forward: false
default_target_path: /w
logout:
path: /logout
target: /login
編集:
Ryanのおかげで、ここに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();
}
}