Laravel处理CORS选项请求

时间:2018-02-14 11:37:15

标签: laravel cors

我正在尝试创建一个小API,我可以在没有失败或错误的情况下获得选项请求。 我制作了这个中间件

    public function handle($request, Closure $next)
{
    if ($request->method() === 'OPTIONS') {
        $headers = [
            'Access-Control-Allow-Origin' => '*',
            'Access-Control-Allow-Methods'=>'POST, GET, OPTIONS, PUT, DELETE'
        ];
        return (new Response(' ', 200))
            ->withHeaders($headers);
    }
    else {
        return $next($request);
    };
}

我的web.php

$router->get('/', function () use ($router) {
return $router->app->version();
});
$router->get('/cors', 'CorsController@index');

当我用邮递员发送请求时,它是可以的,它会在响应中添加标题。但是,然后任何选项请求将得到200响应,不会被重定向或任何东西。

Eariler我尝试在我的middeware中执行此操作

    public function handle($request, Closure $next)
{
    return $next($request)
        ->header('Access-Control-Allow-Origin', '*')
        ->header('Access-Control-Allow-Methods', 'GET, POST, PUT, PATCH, DELETE, OPTIONS');
}

但是这总是抛出一个MethodNotAllowedError。

我在创建新内容时也会使用我的请求内容。 我的问题是如何在laravel中正确处理CORS的选项请求,它不会抛出错误,我不会丢失我的请求内容?

1 个答案:

答案 0 :(得分:3)

试试这个:

public function handle($request, Closure $next)
{
    if($request->getMethod() == 'OPTIONS'){

        header('Access-Control-Allow-Origin: *');
        header('Access-Control-Allow-Methods: POST, GET, OPTIONS, PUT, DELETE');
        header('Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, Key, Authorization');
        header('Access-Control-Allow-Credentials: true');
        exit(0);
    }
    return $next($request);
}