Laravel 7-所请求的资源上没有“ Access-Control-Allow-Origin”标头

时间:2020-05-08 12:27:42

标签: php laravel vue.js cors laravel-7

我知道这是一个非常常见的问题,还有很多其他问题,但是,我不知道该怎么办了。我已经将Laravel API应用程序从5.8升级到7.10.3,现在我遇到的CORS问题以前从未发生过。 Laravel 7已经提供了fruitcake/laravel-cors软件包,这是我在config/cors.php中的配置(默认配置):

'paths' => ['api/*'],
'allowed_methods' => ['*'],
'allowed_origins' => ['*'],
'allowed_origins_patterns' => [],
'allowed_headers' => ['*'],
'exposed_headers' => [],
'max_age' => 0,
'supports_credentials' => false,

基本上每个originheadersmethods都被允许。我什至尝试将这些行添加到bootstrap/app.php中,但行不通:

header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: *');
header('Access-Control-Allow-Headers: *');

我的前端是使用VueCli 3构建的,我没有对其进行任何更改,只是升级了Laravel版本。

POSTMAN的请求运行正常。有谁知道为什么会发生此问题?

完整错误消息:

Access to XMLHttpRequest at 'http://127.0.0.1:8000/api/operacao/cadastrar' from origin 'http://localhost:8080' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

2 个答案:

答案 0 :(得分:1)

我发现了问题:我的请求在$request->validate()方法中失败了,并且在带有自定义异常处理程序的try / catch块中,如下所示:

try {
    $request->validate(array(...)); //validation was failing
    //code...
} catch (\Exception $e) {
    //This was the problem
    http_response_code(400);
    die($e->getMessage());
}

只需将$request->validate()放在try之前就可以了。只记得validate()有自己的异常处理程序。

我不知道为什么会导致CORS错误,但是我认为这是因为它是在headers等之前发送Access-Control-Allow-Origin的。

答案 1 :(得分:0)

使用REACT时,我遇到了类似的问题,我的解决方案是添加标头并按如下格式格式化我的请求。

axios.request({
      method: "POST",
      url: '<url>',
      data: data,
      headers: {
        'Accept': 'application/json',
        'Content-Type': 'application/json',
      },
   })
   .then(function (response) {
     <what to do if works>
   })
   .catch((response) => {
    <what to do if it doesn't work>
   })