对于使用 FOSRestBundle 的 Web 服务,我创建了一个防火墙,强制登录以访问应用程序。
我的问题是,当我通过 ajax 调用 API 时,我需要在用户未通过身份验证时获取错误代码 401,而不是接收登录表单的 html 源代码。如何配置应用程序?
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();
}
}