当前位置: 首页 > 知识库问答 >
问题:

Laravel 5.5:403在使AJAX立柱时被禁止

谯灿
2023-03-14

我已经在这个问题上坚持了两天了,我在StackOverflow和Laracasts上寻找的所有解决方案都没有结果。

我将Laravel5.5与jQuery一起使用,并在Firefox中进行测试。

我的AJAX GET调用工作正常,但是,当我尝试在数据库中推入一个条目时,我得到一个403错误。

我的标头包含CSRF令牌:

<meta name="csrf-token" content="{{ csrf_token() }}">

为在我的控制器中调用的每个表创建模型:

public function pushProfile(Request $request){
        $userid = \Auth::user()->id;
        $data = $request->message;
        $stat = \App\Character::where('owner', $userid)->first();
        $mess = \App\Message::firstOrCreate([
            'posterID' => $userid,
            'loc_x' => '0',
            'loc_y' => '0',
            'characterID' => $stat->id,
            'type' => 'profile'
        ]);
        $mess->content = $data;
        $mess->save();
        return response()->json(['success'=>'Message has been saved!']);
    }

这里是AJAX调用,它基本上检查我的Quilljsdelta。这个delta是一个JSON对象,用于格式化来自所见即所得的消息。然后每隔5秒,它就应该尝试把它推送到我的数据库。

我知道Quilljs方面工作良好,因为我的三角洲显示在我的控制台。但是POST调用本身似乎由于某种原因没有通过身份验证?(这只是我的猜测,对我来说,这似乎是它发送403的唯一原因。)

setInterval(function() {
      if (change.length() > 0) {
        console.log('Saving changes', change);
        /* AJAX setup */
        $.ajaxSetup({
          headers: {
            'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
          }
        });
        $.ajax({
            headers: {
              'Content-Type':'application/json'
            },
            method: 'POST',
            url: '{{ url("/pushProfile") }}',
            data: {
              message:
              { 
                doc: JSON.stringify(quill.getContents())
              },
              _token: $('meta[name="csrf-token"]').attr('content')
            },
            dataType: 'JSON',
            error: function(jqXHR, textStatus, errorThrown) {
              console.log(JSON.stringify(jqXHR));
              console.log("AJAX error: " + textStatus + ' : ' + errorThrown);
            },
            success: function (data) { 
                $(".writeinfo").append(data.msg); 
                console.log("Success!!!");
            }
        });
        change = new Delta();
      }
    }, 5*1000);

为了确保问题不是来自CSRF,我做了一些过分的尝试,在尝试先在ajaxSetup中设置令牌,然后仅在AJAX数据中设置后,我在两者中都分配了它。这些情景都没有改变什么。

当然,我在我的post路由上分配了'Web'中间件来检查上面提到的CSRF令牌。我使用的路线如下:

Route::group(['middleware' => ['web']], function () {
  Route::post('/pushProfile','MessageSend@pushProfile')->name('pushProfile');
});

我还尝试将URL分配为:

url: '/pushProfile',

不幸的是,无济于事...这只是返回一个404而不是我当前拥有的403:

{
"readyState":4,
"responseText":"<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML 2.0//EN\">\n<html>
    <head>\n<title>403 Forbidden</title>\n</head>
    <body>\n<h1>Forbidden</h1>\n
    <p>You don't have permission to access 
    /folder/public/{{ route(&quot;pushProfile&quot;) }}\n
    on this server.<br />\n</p>\n
    <hr>\n
    <address>Apache/2.4.35 (Win64) PHP/7.2.10 Server at localhost Port 80</address>\n
    </body>
    </html>\n",
"status":403,
"statusText":"Forbidden"
}

我错过什么了吗?谢谢!

共有1个答案

丁勇
2023-03-14

我找到了解决办法,哦,上帝,它是如此简单,我为自己感到羞耻:

我使用刀片路由从.js文件调用AJAX。将调用移到刀片文件中解决了整个问题,因为刀片路由只呈现在.blade.php文件中...

我把这个问题留在这里,以防有人遇到同样的麻烦:)

 类似资料:
  • 我在使用Debian 7的笔记本电脑上遇到了403禁止错误 nginx错误日志显示: 2013/07/05 16:27:06[错误]7351#0:*12目录索引“/var/www/install/”被禁止,客户端:127.0.0.1,服务器:localhost,请求:“get/install/http/1.1”,主机:“localhosts” phpinfo工作正常 worker_processe

  • (不过反正码头工人这边似乎一切都ok了...)我在网上读过数百篇文章,但无法找到从任何浏览器访问index.html的方法。我想也许我应该在httpd.conf中添加一些Vhosts(就像我在Xampp或Wamp下所做的那样),但我没有在apache容器中找到这个文件,而且我也不知道如何从我的docker-compose YML中为httpd.conf中的Vhosts添加指令。但这是我个人的想法,

  • 嗨,我刚开始学习Spring、AJAX和JSON。当我试图发回一条信息时,我遇到了一个错误。 信息。jsp 控制器。JAVA 我尝试了很多不同的方法来解决这个问题,但都没有效果,我无法发布消息。 有什么帮助或原因让我一直犯这个错误吗? jquery。js:4帖子http://localhost:8080/spring/sendmessage403(禁止)发送@jquery。js:4 ajax@jq

  • 问题内容: 我已经使用JAX-RS(Jersey 2.0)实现了一个小的REST API,并且正在使用AJAX调用该API,GET和POST都可以正常工作,但是当我调用任何PUT或DELETE方法时,得到的只有以下内容错误信息: 加载资源失败:服务器的响应状态为403(禁止) 这是Java中 DELETE 方法的示例: 这是使用AJAX的Javascript调用: 任何帮助都感激不尽!!谢谢!!

  • 问题内容: 我试图通过从slide_images文件夹中获取所有图像名称并将其附加到来动态地动态显示滑块图像。 问题答案: 最后,我通过使用json解决了这个问题。 首先,我创建getimages.php文件并读取该文件中的目录,并获取所有图像名称并将该名称存储在数组中。 getimages.php 从要动态加载图像的页面调用getimages.php。 index.php 这对我来说是完美的。

  • 对localhost的Ajax请求返回403错误。然而,当我更改controller requestMethod以获取并在浏览器上打开请求“url”时,它会显示从服务器返回的json数据。我希望使用这些数据填充一个下拉列表。请帮帮我。我正在使用spring security 4.0和spring MVC框架。CSRF未禁用。此外,该url在Spring得到保护。 我在这里查看了相关问题,但没有找到