GroceryCRUD 添加、编辑按钮在启用 CodeIgniter CSRF 保护时不起作用
GroceryCRUD add, edit buttons not working when enabling CodeIgniter CSRF protection
我正在使用 GroceryCRUD 1.5.0 with CodeIgniter 2.2.0.
启用 CodeIgniter 的内部 CSRF 保护时:
$config['csrf_protection'] = TRUE;
在 application/config/config.php
中,GroceryCRUD 自动生成的操作按钮(编辑、查看)和链接(添加)不再起作用。
CSRF 令牌似乎没有在 Ajax 调用中传递(通过 Firebug 确认)。可以将此 CodeIgniter 功能与 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 plugin
将此代码添加到您的 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 和 GroceryCRUD 1.5.1,Cookie 与 AJAX 请求一起正确发送, 但是因为令牌改变了,所以只有第一个请求有效。
要始终使用相同的标记,请设置(在 application/config/config.php
中):
$config['csrf_regenerate'] = FALSE;
编辑:参考手册:http://www.codeigniter.com/user_guide/libraries/security.html#cross-site-request-forgery-csrf
我正在使用 GroceryCRUD 1.5.0 with CodeIgniter 2.2.0.
启用 CodeIgniter 的内部 CSRF 保护时:
$config['csrf_protection'] = TRUE;
在 application/config/config.php
中,GroceryCRUD 自动生成的操作按钮(编辑、查看)和链接(添加)不再起作用。
CSRF 令牌似乎没有在 Ajax 调用中传递(通过 Firebug 确认)。可以将此 CodeIgniter 功能与 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 plugin
将此代码添加到您的 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 和 GroceryCRUD 1.5.1,Cookie 与 AJAX 请求一起正确发送, 但是因为令牌改变了,所以只有第一个请求有效。
要始终使用相同的标记,请设置(在 application/config/config.php
中):
$config['csrf_regenerate'] = FALSE;
编辑:参考手册:http://www.codeigniter.com/user_guide/libraries/security.html#cross-site-request-forgery-csrf