php-带ajax请求的Codeigniter csrf令牌(500内部服务器错误)
作者:互联网
我很难通过启用了csrf令牌的CI表单提出ajax请求.我一直在进行长期的研究,在与此相关的每个问题中都提出了相同的解决方案,该解决方案是将令牌val添加到ajax请求中的序列化数据中.我在ajaxSetup中做到了这一点,虽然获得了令牌,但仍然遇到相同的问题.这是我的代码.
//AJAX Setup
$.ajaxSetup({
data:{
csrf_test_name: $("input[name='csrf_test_name']").val()
}
});
//Function ajax login
$("form#login").on("submit", function(e){
var $this = $(this);
var mensaje = $("div.msglogin");
$.ajax({
type: "POST",
url: $this.attr("action"),
data: $this.serialize(),
beforeSend: function() {
mensaje.html('<p><img src="public/frontend/img/miniloader.gif"><span><small> Iniciando..</small></span></p>');
}
})
.done (function(data){
console.log($this.serialize());
if(data == "redirect"){
window.location.replace($("input#baselogin").val());
}else{
mensaje.html(data);
}
})
e.preventDefault();
});
这就是我在console.log $this.serialize()中得到的信息,这意味着正在发送令牌
csrf_test_name=4a4d6eb47fc8f0c8e932b3b56a4eb9c5&usuario=dan&password=meaannn
任何帮助将不胜感激.
解决方法:
发布前,将CSRF令牌添加到您的数据选项中:
$.ajax({
type: "POST",
url: $this.attr("action"),
data: {'<?php echo $this->security->get_csrf_token_name(); ?>':'<?php echo $this->security->get_csrf_hash(); ?>',/*....your data....*/},
beforeSend: function() {
mensaje.html('<p><img src="public/frontend/img/miniloader.gif"><span><small> Iniciando..</small></span></p>');
}
})
CSRF令牌需要与每个请求一起发送,因此应该由数据指定. echo语句执行此操作.您可以单独添加它并进行序列化,但是我已经展示了您所缺少的.
标签:csrf-protection,ajax,codeigniter,php,jquery 来源: https://codeday.me/bug/20191029/1958880.html