symfony - Symfony2防火墙和 FOSRestBundle

  显示原文与译文双语对照的内容

对于使用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();


 }


}



时间: 原作者:

你使用了单词身份验证和不授权,不幸的是,这并不是已经写入。 因此,你可能需要创建自己的。

一般情况下,应该创建一个简单的内核事件侦听器来截获 AuthenticationException异常。 捕获这里事件应允许你在重定向到登录页之前执行任何操作。

FOSRestBundle插件应该提供一个很好的例子来说明如何做到这一点。 FOSRestBundle为当前( AccessDeniedException )的授权层提供了这里功能。 同样的框架也应该提供相同的能力,以便对身份验证层进行相同的操作。

有关提供授权侦听器的更改集,请参见 pull #308 。 有关如何配置侦听器的文档,请参见安全性异常侦听器

原作者:
...