为了账号安全,请及时绑定邮箱和手机立即绑定

带有授权标头的 GET 请求之前的 OPTIONS 请求在苗条框架 4 中不起作用

带有授权标头的 GET 请求之前的 OPTIONS 请求在苗条框架 4 中不起作用

PHP
素胚勾勒不出你 2022-05-27 09:59:21
我已经克隆了已经实现了 CORS的超薄骨架( https://github.com/slimphp/Slim-Skeleton )。但是仍然当 API 在 GET 之前调用 OPTIONS 时,它会发送 405 错误“不允许的方法。必须是以下之一:GET”这是我遇到此错误的路线。$group->get('/users', ListUsersAction::class);    $app->group('', function (Group $group) {        $group->post('/user/create', CreateUsersAction::class);        $group->get('/users', ListUsersAction::class);        $group->get('/user/{id}', ViewUserAction::class);    })->add(AuthenticationMiddleware::class);邮递员也有同样的路线。如果我从标头中删除授权令牌,则相同的路线正在工作。执行甚至没有到达“AuthenticationMiddleware”的第一行。但是我通过添加没有“AuthenticationMiddleware”的相同选项路由来测试它。像这样:    $app->options('/users', function(Request $request, Response $response) {return $response;});    $app->group('', function (Group $group) {        $group->post('/user/create', CreateUsersAction::class);        $group->get('/users', ListUsersAction::class);        $group->get('/user/{id}', ViewUserAction::class);    })->add(AuthenticationMiddleware::class);这是有效的。所以我想我忘了添加一些代码,或者我做了任何导致错误的错误,或者骨架有错误。有人可以帮忙吗?提前致谢。
查看完整描述

2 回答

?
心有法竹

TA贡献1866条经验 获得超5个赞

好的,我找到了解决方案。


您可以使用通配符OPTIONS请求来避免此问题/错误。下面是一个例子:


$app->options('/{routes:.+}', function ($request, $response, $args) {

    return $response;

});

我已经对其进行了测试,目前对我来说工作正常。


如前所述,在我的测试中,我通过创建OPTIONS路由来尝试它/users,它正在工作,但是为创建OPTINOS的所有 API 路由创建路由是没有意义的,这里是通配符OPTIONS路由的解决方案。


查看完整回答
反对 回复 2022-05-27
?
波斯汪

TA贡献1811条经验 获得超4个赞

我只是在我想要使用的所有路线中添加了选项:


示例如果我在 /api/user 路由中使用它,则添加以下代码:


$app->options('/api/user', function ($request, $response, $args) {

    return $response;

});


查看完整回答
反对 回复 2022-05-27
  • 2 回答
  • 0 关注
  • 100 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信