带jqGrid的Codeigniter:使用csrf_令牌

带jqGrid的Codeigniter:使用csrf_令牌,codeigniter,jqgrid,csrf-protection,Codeigniter,Jqgrid,Csrf Protection,若在配置文件中,我将csrf_标记设置为false,则一切正常。然而,当csrf_标记为true时,我的网格只能从数据库中获取数据,而不能更新或其他任何内容 我正在浏览本网站上有关Сodeigniter+jqGrid的帖子,但仍然不知道该怎么办 我可以得到csrf_令牌的值,但它应该包括在哪里 var lastsel; var addl_params = { ci_csrf: $.cookie('ci_csrf_token') }; $("#grid").jqGrid({

若在配置文件中,我将csrf_标记设置为false,则一切正常。然而,当csrf_标记为true时,我的网格只能从数据库中获取数据,而不能更新或其他任何内容

我正在浏览本网站上有关Сodeigniter+jqGrid的帖子,但仍然不知道该怎么办

我可以得到csrf_令牌的值,但它应该包括在哪里

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');

首先,有必要了解CSRF:

从该职位:

安全类为CSRF令牌生成一个唯一值,该值为 每个HTTP请求。创建对象时,对象的名称和值 令牌已设置

我不熟悉jqGrid的情况是,每个表单都可能获得自己的CSRF令牌。或者,可能所有表单都只有一个标记。无论哪种方式,CodeIgniter都希望每个HTTP请求和响应有一个令牌。基本上,您需要在创建页面和发布数据的第一个请求上关闭循环

因此,您可能需要深入研究jqGrid代码和CI视图,以确保您的输出根据需要生成CSRF令牌

更新:上面博客上的一条评论链接到Ajax CSRF问题: