我在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”
line:203
消息:“”
我有:
我陷入僵局。
这是过去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非常大,但是如果它可以帮助某人帮助我诊断错误,我会发布它。
答案 0 :(得分:2)
尝试使用此命令查看是否是csrf引起的问题。在中间件的VerifyCsrfToken.php中,排除该路由,即
protected $except = [
//
'/app/personrep',
'app/personrep'
];
答案 1 :(得分:0)
我发现了问题。在测试期间使用我的ajax调用之一,我错误地在对象中插入了“ _token”属性。直到我登录到另一台计算机,显然会生成新令牌为止,此方法才起作用。
我将对象从视图中来回传递给控制器,然后进行建模-一个整洁的包...
所以我学到了并且想传递的是ajax调用的data属性中的“ _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);
}
});
将始终覆盖标头中设置的令牌.....