我最近迁移到Laravel 5,现在每个帖子提交都会进行CSRF检查.我想要删除它,但我想遵循最佳实践,所以我会保持这种方式.
另一方面,我提交ajax请求时出现问题..我的页面有多个表单,有些提交甚至不是来自表单,只是简单的ajax调用.我的想法是在页面上有一个隐藏的"令牌"输入并将其附加到每个提交.拥有通用单一令牌输入有任何缺点吗?
另外,我该如何输出令牌?在页脚上创建一个隐藏的输入是否可以?
我正在开发一个Laravel 5应用程序,该应用程序默认为所有POST请求启用CSRF保护.我喜欢这个增加的安全性所以我正在尝试使用它.
在发出简单$.post()请求时,我收到'Illuminate\Session\TokenMismatchException'错误,因为_tokenPOST数据中缺少所需的表单输入.以下是有问题的$ .post请求的示例:
var userID = $("#userID").val();
$.post('/admin/users/delete-user', {id:userID}, function() {
// User deleted
});
Run Code Online (Sandbox Code Playgroud)
我将CSRF令牌存储为标题中的元字段,可以使用以下方法轻松访问它:
var csrf_token = $('meta[name="csrf-token"]').attr('content');
Run Code Online (Sandbox Code Playgroud)
是否可以将此附加到所有传出$.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);
}
});
Run Code Online (Sandbox Code Playgroud)