Проверка 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