我使用GroceryCRUD 1.5.0 笨 2.2.0。
当启用CodeIgniter的内部CSRF保护带:
$config['csrf_protection'] = TRUE;
在application/config/config.php
,那么GroceryCRUD自动生成的动作按钮(编辑,视图)和链接(添加)不工作了。
看来,CSRF令牌不沿Ajax调用(使用Firebug确认)通过。 它可以使用与GroceryCRUD这个笨功能?
我使用GroceryCRUD 1.5.0 笨 2.2.0。
当启用CodeIgniter的内部CSRF保护带:
$config['csrf_protection'] = TRUE;
在application/config/config.php
,那么GroceryCRUD自动生成的动作按钮(编辑,视图)和链接(添加)不工作了。
看来,CSRF令牌不沿Ajax调用(使用Firebug确认)通过。 它可以使用与GroceryCRUD这个笨功能?
我终于成功地解决我的问题。 有两种选择:
最简单的办法 :
组:
$config['grocery_crud_dialog_forms'] = false;
在application/config/grocery_crud.php
。
此方法适用未启用CSRF保护(即,它可以被设置为true
,以产生更优雅的形式),但设置时,如果没有代码修改在JavaScript做失败。
优雅的方式 :
如果我们要使用:
$config['grocery_crud_dialog_forms'] = true;
在application/config/grocery_crud.php
有可爱的形式,则:
包括jquery.cookie插件与形式的网页
此代码添加到您的JS文件自动神奇地插入所有的Ajax POST调用CSRF令牌:
$(document).ready(function() { var csrf_token= $.cookie('csrf_cookie_name'); $.ajaxSetup({ data: { 'csrf_test_name' : csrf_token } }); });
我希望这会帮助别人。
万一有人有相同的错误:对于CI 3.0.1和1.5.1 GroceryCRUD,Cookies 是正确的AJAX请求发送,但是由于令牌的变化,只有第一个请求会工作。
要始终使用相同的标记,设置(在application/config/config.php
):
$config['csrf_regenerate'] = FALSE;
编辑:手动供参考: http://www.codeigniter.com/user_guide/libraries/security.html#cross-site-request-forgery-csrf