【问题标题】:419 Ajax Error on Laravel 5.6 - EditedLaravel 5.6 上的 419 Ajax 错误 - 已编辑
【发布时间】:2018-12-18 13:37:51
【问题描述】:

我在 PHP 7.2 上使用 Laravel 5.6 有多个页面

直到今天早上,当我使用另一台计算机登录时,一切都很好。正如文档中所述,我将我的 CSRF 令牌放在头脑中并为 ajax 获取它们。再次 - 页面一直有效,直到我在另一台计算机上登录。

现在我的 ajax 出现 419 个错误。我查看了我的 GIT 提交,发现 javascript 和 head 模板没有任何变化。

这显然(对我而言)是令牌不匹配或身份验证问题。但是我该如何调试呢?服务器端没有产生错误,从ajax返回的错误是

异常:"Symfony\Component\HttpKernel\Exception\HttpException"
文件:"E:\InetPub\LegacyLogin\LegacyLogin\vendor\laravel\framework\src\Illuminate\Foundation\Exceptions\Handler.php"
线路:203
消息:“”

我有:

  • 在 config/sessions.php 中检查超时
  • 检查 csrf 标头是否 文档
  • 尝试将 CSRF 令牌放入隐藏输入中
  • 删除我的 cookie
  • 注销/登录
  • 重启 IIS

我陷入了僵局。

这是过去 3 周到今天我从另一台计算机登录时有效的代码。

Javascript/Jquery ajax 调用:

$.ajax({
    url: "/app/personrep",
    type: "POST",
    headers: {
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
        },
    data: JSON.stringify(data),
    contentType: "application/json; charset=utf-8",
    success: ()=>{            
        //window.location='/myinfo';
    },
    error: function(e) {
        console.log(e);
    }
});

在 app.blade.php 模板头中:

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

谁能给我指个方向。我什至拿走了其中一个文件(视图)并针对这里和 Laracast 的每一个建议进行了更改...

更新: 下面提供的排除工作......所以我有 2 个 json 字符串 - 一个正常工作,另一个导致 CSRF 出现问题。

--- 我让系统恢复工作。但我不知道发生了什么。我正在使用模型将 JSON 字符串存储在 MySQL 数据库中,之前,我手动从中删除了一个对象。 我在再次手动将 JSON 插入数据库之前验证了它,奇怪的是它影响了多个页面。如果是 JSON 错误,它应该在视图呈现期间出现。

当我得到这个工作时我松了一口气,我需要知道在这个应用程序投入生产之前发生了什么。 JSON 非常大,但如果它可以帮助有人帮助我诊断错误,我会发布它。

【问题讨论】:

    标签: php jquery ajax laravel


    【解决方案1】:

    试试这个,看看是不是 csrf 导致了问题。在中间件的 VerifyCsrfToken.php 中,排除该路由,即

    protected $except = [
            //
        '/app/personrep',
        'app/personrep'
    ];
    

    【讨论】:

    • 我会尝试,我现在知道如何导致错误 - 我在主帖中发布了
    • 排除有效。我有 2 个 json 字符串 - 一个可以正常工作,另一个会导致 CSRF 出现问题。
    【解决方案2】:

    我发现了问题。在测试期间使用我的 ajax 调用之一,我错误地将“_token”属性插入到对象中。这一直有效,直到我登录另一台计算机,显然生成了一个新令牌。

    我将对象从视图中来回传递给控制器​​和模型 - 一个整洁的包...

    所以我学到并想要传递的是 ajax 调用的数据属性中的“_token” 即:

    $.ajax({
        url: "/app/personrep",
        type: "POST",
        headers: {
            'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
            },
        data: {"_token":"asfbgasdfhba"},
        contentType: "application/json; charset=utf-8",
        success: ()=>{            
            //window.location='/myinfo';
        },
        error: function(e) {
            console.log(e);
        }
    });
    

    将始终覆盖标头中设置的令牌.....

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-02
      • 1970-01-01
      • 2019-03-16
      • 1970-01-01
      相关资源
      最近更新 更多