【发布时间】:2015-04-09 15:58:11
【问题描述】:
我正在开发一个 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之类的东西?)如果您有一个工作请求的示例,将会很有帮助。 -
为了使请求正常工作,我必须将令牌直接添加到帖子数据中 - 所以
{id:userID, '_token':token} -
好的,所以你基本上在上面的评论中回答了但不是一个可用的解决方案 -
options['data']._token = csrf_token;似乎没有完成工作,但接近了。请发布一个有效的答案,你有一个 +1 和接受的答案。 :)
标签: jquery ajax laravel laravel-5 jquery-post