Проверка Yii 2.0 CSRF для AJAX-запроса
у меня есть ajax функция, которая запускает удаление записи из моей базы данных.
мне нужно CSRF проверка то же самое. Как я могу это сделать?
Я посылаю CSRF cookie вместе с моим запросом post, но Yii 2.0 не проверяет его, и любой вход, который передается через ajax, достигает сервера.
как мне это сделать CSRF проверка для запросов ajax.
нужно ли вручную устанавливать cookie и проверять?
2 ответов
вам не нужно вручную устанавливать cookie.
если вы используете токен jQuery CSRF, он будет отправлен автоматически.
например, для AngularJS вы можете добавить его вручную, чтобы запросить такие параметры:
yii.getCsrfParam(): yii.getCsrfToken()
убедитесь, что у вас есть YiiAsset включено.
в противном случае вы можете получить их из мета-тегов (это в основном то, что делают эти два метода):
$('meta[name=csrf-param]').prop('content'): $('meta[name=csrf-token]').prop('content')
также обратите внимание, что для включения проверки CSRF оба Controller'ы и Requestв собственность enableCsrfValidation свойство должно быть установлено до true.
обновление:
еще одна важная вещь, чтобы понять:
токен CSRF будет проверяться только на этих методах:GET, HEAD, OPTIONS.
также убедитесь, что у вас есть <?= Html::csrfMetaTags ?> в основном макете.
наконец я определил, что просто включая
<?= Html::csrfMetaTags() ?>
в макете почты автоматически добавит проверку csrf к каждому сообщению / получению запросов, является ли это ajax или нет.Нам не нужно вручную отправлять токен csrf вместе с aja
<?= Html::csrfMetaTags() ?>
запрос терпит неудачу, и бросать исключение..так что это была моя ошибка..Просто добавляю
<?= Html::csrfMetaTags() ?>
будет выполнять проверку csrf, является ли это ajax или не ajax-запросом / отправка формы..
шляпы от изобретателей Yii 2.0 для такого удивительного материала #love-yii-2.0