Laravel 5.6 上的 419 Ajax 错误 - 已编辑

Posted

技术标签:

【中文标题】Laravel 5.6 上的 419 Ajax 错误 - 已编辑【英文标题】:419 Ajax Error on Laravel 5.6 - Edited 【发布时间】: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 非常大,但如果它可以帮助有人帮助我诊断错误,我会发布它。

【问题讨论】:

【参考方案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);
    
);

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

【讨论】:

以上是关于Laravel 5.6 上的 419 Ajax 错误 - 已编辑的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5.7 Ajax 发布请求返回 419 状态码

Laravel 5.5:AJAX 的 419 未知状态

多次尝试后,Laravel 5.5 在 ajax 调用中不断收到 419 发布错误

尽管 Laravel 中的令牌正确,Ajax 调用仍返回 419 错误

Laravel AJAX Request Post 错误代码:使用 laravel auth 登录时会话 ID 更改后的 419

POST http://localhost:8000/offers-ajax/store 419 (未知状态) Laravel AJAX