我很难尝试通过启用了 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 令牌添加到您的data
发布前的选项:
$.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
声明就是这样做的。您可以单独添加它并序列化,但我已经展示了您缺少的内容。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)