gpt4 book ai didi

Symfony2 防火墙和 FOSRestBundle

转载 作者:行者123 更新时间:2023-12-04 08:48:03 24 4
gpt4 key购买 nike

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

最佳答案

您使用了身份验证而不是授权这个词,不幸的是,这似乎还没有写下来。因此,您可能需要创建自己的。

在一般情况下,一个简单的 Kernel Event listener拦截AuthenticationException应该创建异常。捕获此事件应该允许您在重定向到登录页面之前执行您喜欢的任何操作。

FOSRestBundle应该提供一个很好的例子来说明如何做到这一点。 FOSRestBundle 目前为授权层提供此功能 (AccessDeniedException)。稍加修改后,相同的框架应该也能为身份验证层提供相同的功能。

见拉#308对于提供授权监听器的更改集。参见 Security Exception Listener有关如何配置监听器的文档。

关于Symfony2 防火墙和 FOSRestBundle,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15620922/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com