GroceryCRUD добавить, кнопки редактирования не работают при включении защиты CodeIgniter CSRF

Я использую GroceryCRUD 1.5.0 с CodeIgniter 2.2.0.

При включении внутренней защиты CSRF CodeIgniter с помощью:

$config['csrf_protection'] = TRUE;

в application/config/config.php, тогда автоматически генерируемые кнопки действий GroceryCRUD (редактировать, просматривать) и ссылки (добавлять) больше не работают.

Кажется, что токен CSRF не передается в вызовах Ajax (подтверждено Firebug). Можно ли использовать эту функцию CodeIgniter с GroceryCRUD?

2 ответа

Решение

Мне наконец удалось решить мою проблему. Доступны два варианта:

Простой способ:

Задавать:

$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 в страницы с формами

  2. добавьте этот код в ваши файлы JS, чтобы автоматически вставить токен CSRF во все вызовы ajax POST:

$(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

Другие вопросы по тегам