【发布时间】:2019-03-14 04:20:29
【问题描述】:
只有当我提交带有 ajax 调用的表单时,我才会收到 TokenMismatchException 错误?如果我不使用 Ajax 调用,我不会收到错误消息。
这是什么原因造成的?
Laravel 5.4
我的 app.blade.php 脑子里有这个:
<meta name="csrf-token" content="{{ csrf_token() }}">
我的ajax.js
$( document ).ready(function() {
// storing comments
$('#storeComment').on('submit', function(e) {
e.preventDefault();
$.ajax({
method: 'POST',
url: '/comments',
data: {},
success: function(response){
console.log(response);
},
error: function(jqXHR, textStatus, errorThrown) {
console.log(JSON.stringify(jqXHR));
console.log("AJAX error: " + textStatus + ' : ' + errorThrown);
}
});
});
});
我还使用了 bootstrap.js,它自动将 csrf-token 元标记的值注册到 Axios HTTP 库。如 Laravel 文档中所述。
控制方法:
public function store(CommentRequest $request)
{
$comment = Auth::user()->comments()->save(new Comment($request->all()));
$response = array(
'status' => 'success',
'comment' => $comment
);
return response()->json($response);
}
【问题讨论】:
-
你是否在数据字段中发送了 csrf 令牌
-
@ShaielndraGupta 我不认为这是必要的,因为我将它存储在元标记中,如 laravel 文档中所述?
-
但是你没有在这里使用
axios。你用jquery -
因为
automatic csrf injection在axios里,不在jquery里。 -
@Michael 你是对的。 ajaxSetup 调用应该为您适当地设置标题。我认为您的会话可能存在潜在问题。
标签: ajax laravel laravel-5 csrf