2016-12-01 7 views
1

Я использую CodeIgniter и мы с поддержкой защиты от CSRF,защита Codeigniter CSRF с DataTables АЯКС URL

$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 в Ajax Получение данных?

ответ

2

Pass его в качестве заголовка в вашей функции 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

Я получил решение сейчас, фактически имя токена в config и js было другим, теперь сделано так же и решена проблема, спасибо, – rjcode

Смежные вопросы