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 中的令牌正确,Ajax 调用仍返回 419 错误
Laravel AJAX Request Post 错误代码:使用 laravel auth 登录时会话 ID 更改后的 419
POST http://localhost:8000/offers-ajax/store 419 (未知状态) Laravel AJAX