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

问题描述 投票:0回答:1

我克隆了已经实现了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);

这正在工作。所以我想我忘了添加一些代码,或者我做了任何导致错误的错误,或者骨架有错误。

有人可以帮忙吗?预先感谢。

php routing cors slim slim-4
1个回答
0
投票

好,我找到了解决方法。

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

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

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


[在我的测试中,如前所述,我通过为OPTIONS创建/users路由尝试了此操作,但仍有效,但是为所有要创建的API路由创建OPTINOS路由没有意义,这是解决方案,因为通配符OPTIONS路由。

感谢@odan花时间发表评论,但通配符OPTIONS路由是更好的解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.