2016-12-01 47 views
1

我使用笨,我們已經啓用了CSRF保護,笨CSRF保護與數據表AJAX網址

$config['csrf_protection'] = TRUE; 

我們使用:

`<input type="hidden" name="<?php echo $this->security->get_csrf_token_name(); ?>" value="<?php echo $this->security->get_csrf_hash(); ?>">` 

在表單提交和它做工精細,

但我的應用程序也使用DataTables來獲取服務器數據與AJAX,

var handleDataTable = function() { 
    var table = $('#my_table').DataTable({ 
     "ajax": { 
      "url" : baseURL + "user/core/data/"+report_id, 
      "dataType" : "json", 
      "type" : "POST", // ajax source 
     }, 
    }); 
} 

顯然,這將顯示「The action you have requested is not allowed.」的消息,

我怎麼能在阿賈克斯檢索數據傳遞CSRF?

回答

2

把它作爲你的Ajax功能的標題:

var handleDataTable = function() { 

    var table = $('#my_table').DataTable({ 
     "ajax": { 
      "url" : baseURL + "user/core/data/"+report_id, 
      "dataType" : "json", 
      "type" : "POST", // ajax source 
      "headers": { 
      'CSRFToken': TOKEN //replace by your name/value 
      } 
     }, 
}); 

如果你有很多Ajax請求,您應該設置一個全球性的標題爲所有的人:

$.ajaxSetup({ 
    headers: { 
     'CSRFToken': TOKEN //replace by your name/value 
    } 
}); 

或發送名稱/值對作爲數據的一部分:

$('#myTable').DataTable({ 
    ajax: { 
     url: '...', 
     data: function (d) { 
      d.csrfName = csrfValue; 
     } 
    } 
}); 

Source

+0

感謝您的信息,我已經在AJAX中添加了這個,但我不確定CodeIgniter是否會查找令牌名稱和哈希值?如果是的話,我必須傳遞兩個值作爲標記,我怎麼能? – rjcode

+0

檢查編輯替代 – xShirase

+0

我現在得到的解決方案,實際上配置和js中的令牌名稱是不同的,現在使相同的和解決問題,謝謝, – rjcode