yii2 Ошибка Bad Request (#400): Unable to verify your data submission. РЕШЕНИЕ -- скрытое поле (Не удалось проверить переданные данные.)
Primary tabs
Почему это
Ошибка вызвана борьбой Yii2 c проблемами безопасности типа CSRF.
Как решить
Для того, чтобы форма отправлялась в ней должно быть скрытое вида:
<input type="hidden" name="_frontendCSRF" value="<?=Yii::$app->request->getCsrfToken()?>" />
Причём значение для имени name инпута (в данном примере оно выставлено в "_frontendCSRF") тоже "имеет значение" -- его можно получить вызовом:
\yii::$app->request->csrfParam
или: чтобы узнать какое именно оно должно быть выполните на этой же странице код:
<?php use yii\helpers\Html; use yii\bootstrap\Nav; use yii\bootstrap\NavBar; use yii\widgets\Breadcrumbs; use frontend\assets\AppAsset; use common\widgets\Alert; ?> <?= Html::csrfMetaTags() ?>
Например в моём случае я получил:
<meta name="csrf-param" content="_frontendCSRF"> <meta name="csrf-token" content="c3lRWjVEWXBESzkPBHBv22sMY888FWg6QkATNnAKKyU0Sh93RCstPg==">
Т.е. нужно взять значение метатэга csrf-param, что я и сделал для ajax-формы
Откуда берутся и как настроить
вообще изначально это настройки компонента запроса, выглядеть может как-то так:
'request' => [ // !!! ниже должно быть уникальное значение !! 'cookieValidationKey' => 'dthzOCfgHfvafCJjccDH', // секретный ключ 'csrfParam' => '_frontendCSRF', // будет использовать как имя поля (атр. name) 'baseUrl' => '' ],
И располагаться в файл конфига вашего приложения:
\frontend\config\main.php
или же конфиге общем (для всех приложений сайта если не указано иное):
\common\config\main.php
- vedro-compota's blog
- Log in to post comments
- 14236 reads