Codeigniter在

时间:2017-11-26 08:08:33

标签: javascript php jquery ajax codeigniter

您好我在我的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获取数据,然后在控制台上输出结果。

修改

对不起,我仍然收到错误

enter image description here

2 个答案:

答案 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

});