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中拥有可爱的造型,那么:

  1. 在带有表单的页面中包含 jquery.cookie plugin

  2. 将此代码添加到您的 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