Codeigniter с jqGrid: используйте csrf_token

Если в конфигурационном файле поставить csrf_token на false и все работает. Однако, когда csrf_token равно true, моя сетка может получать данные только из базы данных, но не обновлять или что-то еще.

Я просматриваю сообщения на этом сайте о Сodeigniter+jqGrid, но так и не понял, что мне делать.

Я могу получить значение csrf_token, но куда его включать?

var lastsel;  
var addl_params =
{
    ci_csrf: $.cookie('ci_csrf_token')
};

$("#grid").jqGrid({
    url:'url to script',
    datatype: "json",
    mtype: 'GET',
    colNames:['id', 'Nickname', 'Breed'],
    colModel:[
        {name:'id',index:'id', width:55, sortable:false, editable:false, 
            editoptions:{readonly:true,size:10}}, 
        {name:'nickname',index:'nickname', width:100,editable:true, 
            edittype:"text"},
        {name:'breed',index:'breed', width:100,editable:true, edittype:"text"},
    ],
    jsonReader : {
        root:"rows",
        page: "page",
        total: "totalpages",
        records: "records"
    },
    rowNum:10,
    rowList:[10,20,30],
    pager: jQuery('#gridpager'),
    sortname: 'nickname',
    viewrecords: true,
    sortorder: "asc",
    caption:"Cats",

    onSelectRow: function(id){
        if(id && id!==lastsel){
            jQuery('#grid').jqGrid('restoreRow',lastsel);
            jQuery('#grid').jqGrid('editRow',id,true,null, null);
            lastsel=id;
        }
    },
    editurl:"edit-url"
}).navGrid('#gridpager');

person Anri Lefer    schedule 09.05.2012    source источник


Ответы (1)


Сначала необходимо понять CSRF:

http://www.beheist.com/index.php/en/blog/csrf-protection-in-codeigniter-2-0-a-closer-look

Из этого поста:

«Класс безопасности генерирует уникальное значение токена CSRF с каждым HTTP-запросом. При создании объекта устанавливаются имя и значение токена».

Что, возможно, происходит (я не знаком с jqGrid), так это то, что каждый form, возможно, получает свой собственный токен CSRF. Или возможно, что для всех форм существует только один токен. В любом случае CodeIgniter ожидает один токен на HTTP-запрос и ответ. По сути, вам нужно закрыть цикл при первом запросе на создание страницы и POST данных.

Поэтому вам может потребоваться изучить код jqGrid и представление CI, чтобы убедиться, что ваши выходные данные генерируют токен CSRF по желанию.

Обновление: в одном из комментариев в блоге выше была ссылка на проблемы Ajax CSRF: http://aymsystems.com/ajax-csrf-protection-codeigniter-20

person seangates    schedule 12.09.2012