带有授权 Header 的 GET 请求之前的 OPTIONS 请求在 slim 框架 4 中不起作用
OPTIONS request before GET request with Authorization Header not working in slim framework 4
我克隆了已经实现 CORS 的 slim skeleton (https://github.com/slimphp/Slim-Skeleton)。
但是当 API 在 GET 之前调用 OPTIONS 时,它仍然发送 405 ERROR "Method not allowed. Must be one of: 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);
邮递员正在使用相同的路线。如果我从 header.
中删除授权令牌,则相同的路线有效
执行甚至没有到达 "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);
这是有效的。所以我想我忘了添加一些代码或者我做错了导致错误,或者骨架有错误。
有人可以帮忙吗?
提前致谢。
好的,我找到了解决方案。
您可以使用通配符 OPTIONS
请求来避免此问题/错误。
下面是一个例子:
$app->options('/{routes:.+}', function ($request, $response, $args) {
return $response;
});
我已经对其进行了测试,目前对我来说工作正常。
在我的测试中,如上所述,我通过为 /users
创建 OPTIONS
路由来尝试它,它正在工作但是为所有 API 路由创建 OPTINOS
路由获取创建是没有意义的,这里是通配符 OPTIONS
路由的解决方案。
感谢@odan 花时间发表评论,但通配符 OPTIONS
路由是更好的解决方案。
我刚刚添加了所有路线的选项,我想使用的地方:
示例 如果我在 /api/user 路由中使用它,那么我添加以下代码:
$app->options('/api/user', function ($request, $response, $args) {
return $response;
});
我克隆了已经实现 CORS 的 slim skeleton (https://github.com/slimphp/Slim-Skeleton)。 但是当 API 在 GET 之前调用 OPTIONS 时,它仍然发送 405 ERROR "Method not allowed. Must be one of: 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);
邮递员正在使用相同的路线。如果我从 header.
中删除授权令牌,则相同的路线有效执行甚至没有到达 "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);
这是有效的。所以我想我忘了添加一些代码或者我做错了导致错误,或者骨架有错误。
有人可以帮忙吗? 提前致谢。
好的,我找到了解决方案。
您可以使用通配符 OPTIONS
请求来避免此问题/错误。
下面是一个例子:
$app->options('/{routes:.+}', function ($request, $response, $args) {
return $response;
});
我已经对其进行了测试,目前对我来说工作正常。
在我的测试中,如上所述,我通过为 /users
创建 OPTIONS
路由来尝试它,它正在工作但是为所有 API 路由创建 OPTINOS
路由获取创建是没有意义的,这里是通配符 OPTIONS
路由的解决方案。
感谢@odan 花时间发表评论,但通配符 OPTIONS
路由是更好的解决方案。
我刚刚添加了所有路线的选项,我想使用的地方:
示例 如果我在 /api/user 路由中使用它,那么我添加以下代码:
$app->options('/api/user', function ($request, $response, $args) {
return $response;
});