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
чтобы иметь милые формы, то:
включить плагин jquery.cookie в страницы с формами
добавьте этот код в ваши файлы 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