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



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

直到今天早上,当我用另一台电脑登录时,一切都很好。正如文档中所述,我在脑海中有我的CSRF令牌,并为ajax获取它们。页面再次工作,直到我在另一台电脑下登录。

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

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

exception:"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的每一个建议对其进行了更改。。。

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

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

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

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

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

我发现了问题。在测试期间,我的一个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);
}
});

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

最新更新