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