如果在配置文件中我将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');
答案 0 :(得分:0)
首先,有必要了解CSRF:
http://www.beheist.com/index.php/en/blog/csrf-protection-in-codeigniter-2-0-a-closer-look
从那篇文章:
“Security类为CSRF令牌生成唯一值 每个HTTP请求。创建对象时,名称和值 令牌已设置。“
可能发生的事情(我不熟悉jqGrid)是每个form
都可能获得它自己的CSRF令牌。或者,所有表单可能只有一个令牌。无论哪种方式,CodeIgniter都希望每个HTTP请求和响应都有一个令牌。基本上,您需要在创建页面的第一个请求和数据的POST上关闭循环。
因此,您可能需要深入了解jqGrid代码和CI视图,以确保您的输出根据需要生成CSRF令牌。
更新:上述博客中的一条评论有一个指向Ajax CSRF问题的链接:http://aymsystems.com/ajax-csrf-protection-codeigniter-20