Laravel 5:仅在一个 URL 上路由 CORS 问题

2023-12-07

我正在尝试向外部 laravel 站点发出 2 个 ajax 请求。其中一个请求完美运行(“列表”)。另一个(“savedevice”)给我以下错误:

访问 XMLHttpRequest 位于 'http://localhost/somesite/devicecreate' 来自来源 'null' 已被 CORS 策略阻止:请求的资源上不存在 'Access-Control-Allow-Origin' 标头。

origin 为 null,因为请求来自本地 html。

我已经创建了一个适用于第一个路由但不适用于第二个路由的 CORS 中间件解决方案。

这2条路由存储在web.php中,如下所示:

  Route::post('/devicecreate','FrontEndController@savedevice')->middleware('cors');
  Route::post('/list', 'FrontEndController@list')->middleware('cors');

这是我在 javascript 中的 ajax 请求函数

var ajaxRequest = function ( url, data, callback ) {

        var  xhr = new XMLHttpRequest();

        xhr.onerror = function(e) { 
              console.log("Ajax request error");
        };

        xhr.addEventListener("load",function () {
              xhr.responseJSON = JSON.parse( xhr.responseText );
              callback( xhr.responseJSON);
        });

        xhr.open("POST", url );
        xhr.setRequestHeader("X-Requested-With","XMLHttpRequest");
        xhr.send(data);
};

目前(出于测试目的)两种路由方法都执行相同的操作。但只有“/list”有效。

如果我尝试 php工匠路线:列表我可以看到“devicecreate”和“list”具有相同的方法、正确的操作和相同的中间件

我的 CORS 中间件如下所示:

<?php

  namespace App\Http\Middleware;

  use Closure;

  class Cors
  {
     /**
      * Handle an incoming request.
      *
      * @param  \Illuminate\Http\Request  $request
      * @param  \Closure  $next
      * @return mixed
      */
     public function handle($request, Closure $next)
     {

         if ($request->getMethod() == "OPTIONS") {
             return response(['OK'], 200)
             ->withHeaders([
            'Access-Control-Allow-Origin' => '*',
            'Access-Control-Allow-Methods' => 'GET,POST',
            'Access-Control-Allow-Headers' => 'Authorization,Content-Type,X-Requested-With,XMLHttpRequest',
          ]);
    }

    return $next($request)
    ->header('Access-Control-Allow-Origin', '*')
    ->header('Access-Control-Allow-Methods', 'GET,POST')
    ->header('Access-Control-Allow-Headers','Authorization,Content-Type,X-Requested-With,XMLHttpRequest');

      }
  }

我也尝试运行 php artisan路由:缓存.

我尝试过重命名路线,但没有什么区别。

有人可以帮忙吗?


24 小时后,我为遇到以下任何情况的任何人提供了解决方案:

  • CORS/跨域错误从外部源发布ajax(否则预检)
  • 419 未知状态
  • 从外部站点发布时围绕 CSRF 令牌的问题。

1)创建一个CORS中间件(https://laravel.com/docs/5.8/middleware)。您可以使用上面显示的我的中间件代码。

2) 确保将中间件添加到受保护的 $route Middleware 下的 Http/Kernel.php 文件中,例如:'cors' => \App\Http\Middleware\Cors::class,

3) 仅将中间件附加到需要它的路由。就我而言,这是:

Route::post('/setdevice','FrontEndController@savedevice')->middleware('cors');
Route::post('/list', 'FrontEndController@list')->middleware('cors');

4) 请记住从 CSRF 令牌验证中排除您的外部 Ajax 请求!我的问题是我忘记添加第二条路线!!因此,就我而言,我将这些添加到 Http/Middleware/VerifyCsrfToken.php 中受保护的 $ except 参数中:

 protected $except = [
        'list',
        'savedevice',
    ];
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Laravel 5:仅在一个 URL 上路由 CORS 问题 的相关文章

随机推荐

  • 如何调试 htaccess 重写脚本

    我想知道如何创建和调试这种脚本 如果您不习惯编写它们 像我一样 那么它可能会变得有点令人头痛 你使用工具来创建它们吗 有什么技巧可以调试正在发生的事情 而不是仅仅创建本地结构并查看浏览器中发生的情况 读者注意 旧答案不再有效 从版本 2 4
  • 在第一个“.”之前获取一个字符串与 PHP

    Lorem Ipsum 只是印刷和排版行业的虚拟文本 from Lorem Ipsum 只是印刷和排版行业的虚拟文本 自 1500 年代以来 Lorem Ipsum 一直是行业标准的虚拟文本 当时一位不知名的印刷商拿走了一堆字体并将其打乱以
  • 从列表中进行互斥随机抽样

    input beleriand mordor hithlum eol morgoth melian thingol 我在创建 X 个大小为 Y 的列表而不重复任何元素时遇到问题 我一直在做的是使用 x 3 y 2 import random
  • 在android上解密php加密数据

    An Android客户端 4 2 1 应用程序通过HttpPost请求给一个PHP 5 6 API 该 API 使用以下方式加密数据AES合规的RIJNDAEL 128 然后使用 OpenSSL 公共加密的客户端公钥对 AES 加密的密钥
  • 如何在 C++ 中使用可以具有多种数据类型的单个变量

    一个变量怎么可以有两种数据类型 如果 月 是一个变量 它应该从 std cin 的输入中获取 我应该怎么做才能让用户输入 January 这样的字符串或输入像 1 这样的整数 在 C 17 中 我们得到了名为 std variant 的东西
  • 如何使用Enquire.Js?

    查询 js是一个为 Javascript 重新创建 CSS 媒体查询的 Javascript 这意味着您可以将 Javascript 封装在媒体查询中 就像您将 CSS 包装在媒体查询中一样 我不太确定如何使用它 本教程说 enquire
  • maven pom.xml如何识别非标准项目结构中的testng测试用例?

    我对 Maven 和 testng 完全陌生 我使用 Maven 作为构建工具 使用 testng 作为测试框架 我没有遵循标准的 Maven 项目结构 现在我想要我的pom xml在我的项目中执行测试用例 问题是 如何pom xml知道执
  • 从 firebase 数据库检索计算平均值

    我正在创建一个 iOS 应用程序 该应用程序使用每个地点的地名和评级 我已经把事情做好了 我的意思是 我将数据保存到数据库中 并且我也可以读取它们 唯一的问题是 当我阅读它们时 我希望它们通过计算每个位置的平均值来加载到我的 tablevi
  • postgres:在字符串中搜索多个单词

    我正在为我的公司后台系统实施基本形式的搜索 我想找到包含搜索查询中所有单词的所有产品名称 所以如果我有这两种产品 Deodorant with cucumber flavor Deoderant with apple flavor 搜索查询
  • jquery中如何获取textarea的值?

    我有这个表格 我试图从文本区域获取值 由于某种原因它不想这样做
  • 使用 FileResult 在 Asp.Net MVC 中下载任何类型的文件?

    有人建议我应该使用 FileResult 来允许用户从我的 Asp Net MVC 应用程序下载文件 但我能找到的唯一示例始终与图像文件有关 指定内容类型 image jpeg 但是如果我不知道文件类型怎么办 我希望用户能够从我网站的文件区
  • 如何使用 selenium webdriver 在 C# 中以私有模式启动 IE

    我开始将 selenium Webdriver 与 c 和 Visualstudio 一起使用 我想以私有模式启动 Internetexplorer 所以我在测试期间不必关心旧的浏览数据 我现在搜索了很长时间才找到如何做到这一点 遗憾的是我
  • Fluent NHibernate 强制外键引用不可为空

    刚刚接触一些 Fluent NHibernate AutoMap 约定 并遇到了一些我无法弄清楚的事情 我想我只是没有找对地方 基本上试图在一对多关系的 多 方面强制执行 NOT NULL 看起来 使用自动映射 它总是使数据库中的父属性 I
  • timezone_name_from_abbr() 无法正确识别

    基本上我的网站是全球性的 我需要能够检测用户的时区并显示准确的时间 我有一个非常简洁的脚本 直到现在它都可以完美地工作 它需要一个时区偏移量 我用 javascript 获取并通过 cookie 传递该时区偏移量 if empty COOK
  • Django 管理后端“操作错误”尝试写入只读数据库

    这个问题似乎已被问过很多次 但我检查过的所有解决方案尚未对我有用 我在跑步nginx在安装了 Django 1 6 1 的 Ubuntu 14 04 服务器上 我正在尝试为项目使用默认的 django 管理后端 通常位于 localhost
  • #1067 - “bonusid”的默认值无效,我该如何修复此错误?

    SQL查询 CREATE TABLE bonus bonusid INT 10 DEFAULT 0 NOT NULL AUTO INCREMENT empid INT 10 DEFAULT 0 NOT NULL datebonus DATE
  • 如何通过参数操作保护 REST API 免受重放攻击?

    我正在开发安全支付 API 我希望通过操纵 url 中的参数来避免重放攻击 例如在以下 API 调用中 一旦执行此 API 调用 具有足够知识的人就可以通过修改这三个参数中的任何一个来执行相同的 API 调用 以满足他 她自己的利益 我曾想
  • jquery - 滑动切换不平滑

    我有一个问题slideToggle函数于jQuery 一点也不顺利 每当我单击 查看更多 按钮时 应该显示的内容slideToggle 只是弹出 没有任何效果 这是 HTML 代码 td class third a href class b
  • C++ -- Detours (Win32 API 劫持) -- 劫持类方法

    我很长一段时间都没有遇到 Detours 劫持功能的问题 当我尝试劫持类方法时 在我的例子中是来自 mshtml dll 的 IHTMLDocument2 write 我遇到了无尽的问题 主要是类型不匹配 由于我在网上没有找到任何相关示例
  • Laravel 5:仅在一个 URL 上路由 CORS 问题

    我正在尝试向外部 laravel 站点发出 2 个 ajax 请求 其中一个请求完美运行 列表 另一个 savedevice 给我以下错误 访问 XMLHttpRequest 位于 http localhost somesite devic