CORS Vue 和 OctoberCMS

Posted

技术标签:

【中文标题】CORS Vue 和 OctoberCMS【英文标题】:CORS Vue and OctoberCMS 【发布时间】:2020-04-26 14:07:44 【问题描述】:

对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。

我正在使用 Vue(VueX、vue-router、...)和 OctoberCMS 构建应用程序。我通过 MAMP 在本地为 API 和 APP 创建虚拟域。我在 OctoberCMS 中通过插件 'rluders-cors' 配置了所有 CORS。

Route::group(
    [
        'prefix' => 'api/v1',
        'middleware' => ['api','jwt.auth','\Barryvdh\Cors\HandleCors'],
    ],
    function () 
         // Routes here
    
);

当我部署到 VPS (Centos 6) 中时,我收到了来自浏览器的上述响应。我在 API 的 .htaccess 文件中添加了标头。当我通过浏览器直接打开 API 时(打开 jwt.auth 中间件),我得到了 .htaccess 文件中设置的所有标头。但在 App 中,就不行了。

我尝试使用 App 的主域(abc.example)从我的本地虚拟域(local.local)调用 API,它仍然有效。但是我尝试了本地App调用VPS中的主API,它不起作用。

请帮帮我!谢谢。

【问题讨论】:

这是失败的预检 OPTIONS 请求。直接从浏览器访问 API 不会触发 CORS,因此不会发送预检。当您尝试从应用程序中发出请求时,您应该能够在浏览器的开发人员工具的 Network 选项卡中看到 preflight OPTIONS 请求(如果没有,请尝试其他浏览器)。检查开发人员工具中的响应标头以检查返回的内容。错误消息表明该请求中缺少 Access-Control-Allow-Origin 显示临时标题。我在 Chrome 和 Safari 浏览器中都没有任何 OPTIONS 请求 【参考方案1】:

所以我对路线的解决方案是寻找飞行前响应。因此,在请求数据中,如果它为空,我将发送预检响应(我认为任何字符串都可以)。然后是一个不为空的请求。这是我发现的最简单的解决方法。您仍然必须允许访问控制域。我通常将其设置为 all 并且始终有一个令牌系统来验证 GET 以外的方法。

Route::match(['POST', 'OPTIONS'],'api/update-todo', function(Request $req) 
$data = $req->input();
if (!empty($data)) 
    Todo::where('id', $data['id'])
        ->update([
        'name' => $data['name'],
        'description' => $data['description'],
        'status' => $data['status'] 
    ]);
    return response()->json([
        'Success' => $data,
    ]);
 else 
    return response()->json([
      'Success' => $req,
    ]);

);

【讨论】:

【参考方案2】:

就我而言,它适用于:

Route::options('/any', function() 
   $headers = [
        //'Access-Control-Allow-Methods'=> 'POST, GET, OPTIONS, PUT, DELETE',
        'Access-Control-Allow-Headers'=> 'X-Requested-With, Content-Type, X-Auth-Token, Origin, Authorization'
   ];
   return \Response::make('You are connected to the API', 200, $headers);
)->where('any', '.*');

【讨论】:

以上是关于CORS Vue 和 OctoberCMS的主要内容,如果未能解决你的问题,请参考以下文章

CORS - Api 网关、lambda 和 vue.js [关闭]

本地主机上的 Access-Control-Allow-Origin(Laravel 和 Vue)CORS CORS 错误

Vue 3 Instagram 动态 - CORS

在 vue 中使用 axios 的 Cors 和预检错误

使用 Vue.js 和 Axios 向 Mailchimp 提交表单会导致 CORS 错误

使用 vue 使用子域 api 并且总是得到 cors 错误 [重复]