我正在开发一个使用Laravel 5框架的应用程序,它默认启用了所有POST请求的CSRF保护。我喜欢这种额外的安全性,所以我正在尝试让它正常工作。
当我进行一个简单的$.post()
请求时,我得到了一个'Illuminate\Session\TokenMismatchException'
错误,因为POST数据中缺少所需的表单输入_token
。以下是受影响的$.post请求的示例:
var userID = $("#userID").val();
$.post('/admin/users/delete-user', {id:userID}, function() {
// User deleted
});
我已将我的CSRF令牌存储为头部中的元字段,并可以使用以下方式轻松访问它:
var csrf_token = $('meta[name="csrf-token"]').attr('content');
是否可能将此附加到所有传出的$.post()
请求的json数据中?我尝试使用标头,但Laravel似乎无法识别它们 -
var csrf_token = $('meta[name="csrf-token"]').attr('content');
alert(csrf_token);
$.ajaxPrefilter(function(options, originalOptions, jqXHR){
if (options['type'].toLowerCase() === "post") {
jqXHR.setRequestHeader('X-CSRFToken', csrf_token);
}
});
_token
字段?(例如,类似于options['data']._token = csrf_token
?)如果您有一个工作请求的示例,那将非常有帮助。 - apsillers{id:userID,'_token':token}
。 - NightMICUoptions['data']._token = csrf_token;
似乎不能完成任务,但很接近。请发布一个可行的答案,你将得到一个+1和被接受的答案。 :) - NightMICU