您好我在我的codeigniter框架中将CSRF保护设置为true
,我想知道如何在我的AJAX请求中应用CSRF令牌,因为我得到The action you requested is not allowed
是我的AJAX请求,以下是我正在处理的代码示例:
HTML
<button type="button"
class="btn btn-primary btn-sm edit_category"
data-id="<?= $category->category_id ?>">
<i class="fa fa-pencil-square-o" aria-hidden="true"></i>
</button>
当用户点击按钮时,JS运行:
$(document).on('click', '.edit_category', function() {
$.ajax({
type: 'POST',
url: base_url + 'admin/getinfo_category',
data: {
'category_id': $(this).data('id')
},
success:function(data){
console.log( JSON.parse(data) );
},
error: function (data) {
console.log('ajax error');
} // end of error
}); // ajax
});
控制器
public function getinfo_category() {
if( ($this->session->userdata('logged_in') && $this->session->userdata('role') ) &&
($this->session->userdata('logged_in') == TRUE && $this->session->userdata('role') == 'admin' ) ) {
$query = $this->admin_model->getinfo_category($this->input->post('category_id'));
if( isset($query) ) {
echo json_encode($query);
} else {
echo 'ajax fail';
}
} else {
redirect(base_url() . 'admin/index');
}
}
模型
public function getinfo_category($category_id) {
$query = $this->db->select('category_name, category_desc')->where('category_id', $category_id)->get('category');
if($query) {
return $query->row();
} else {
return false;
}
}
现在它应该做的是从基于数据库的$category_id
获取数据,然后在控制台上输出结果。
修改
对不起,我仍然收到错误
答案 0 :(得分:0)
您必须将CSRF令牌发送到您的请求:
$(document).on('click', '.edit_category', function() {
$.ajax({
type: 'POST',
url: base_url + 'admin/getinfo_category',
data: {
'category_id': $(this).data('id'),
'<?php echo $this->security->get_csrf_token_name(); ?>':'<?php echo $this->security->get_csrf_hash(); ?>',
},
success:function(data){
console.log( JSON.parse(data) );
},
error: function (data) {
console.log('ajax error');
} // end of error
}); // ajax
});
更多信息:https://www.codeigniter.com/user_guide/libraries/security.html
答案 1 :(得分:0)
这种方法怎么样。
$.ajaxSetup({
headers: {
'<?php echo $this->security->get_csrf_token_name(); ?>' : '<?php echo $this->security->get_csrf_hash(); ?>'
}
});
$(document).on('click', '.edit_category', function() {
$.ajax({
type: 'POST',
url: base_url + 'admin/getinfo_category',
data: {
'category_id': $(this).data('id')
},
success:function(data){
console.log( JSON.parse(data) );
},
error: function (data) {
console.log('ajax error');
} // end of error
}); // ajax
});