2017-02-03 14 views
0

Когда я пытаюсь выполнить проверку на CSRF, я получаю эту ошибку. У меня есть Html::csrfMetaTags() в главном макете, и он отлично работает.YII2: плохой запрос (# 400) Не удалось проверить отправку данных?

<meta name="csrf-param" content="_csrf-frontend"> 
<meta name="csrf-token" content="QmcxU050NEIzD2AaDScBdxQqHAkFM04XCT9AFhZNQSlyIlISYy1yMg=="> 

Я использую activeForm, и я проверил POST-запрос и обнаружил, что информация csrf отправляется правильно.

_csrf-frontend:Ukp1TC5KYUgaEBQIWwg4cCI7OCZEf1YYERJMfkIuAH84DD8ObQlTEA== 

Мой раздел конфигурации:

'request' => [ 
    'cookieValidationKey' => 'LWCVTaYxV7aK6dqMWNKm1C7HMit6bJKa', 
    'csrfParam' => '_csrf-frontend', 
    'enableCsrfValidation' => true, 
], 

P.S. Данные csrf-token в мета-имени и данные в почтовом запросе разные, это нормально или нет?

+0

У вас есть файлы cookie, включенные в вашем браузере или у вашего приложения yii включен сеанс? Что произойдет, если вы добавите «enableCookieValidation» => true, «в настройках вашего запроса? –

ответ

0

Вы уверены, что отправляете параметры внутри каждой формы?

Внутри вашей формы вы должны добавить скрытый параметр, как это:

echo Html::hiddenInput(
    Yii::$app->request->csrfParam, 
    Yii::$app->request->csrfToken 
); 

Таким образом, каждый запрос получает данные CSRF, я не сделал на уровне макета.

+0

Я использую ActiveForm для генерации HTML-кода. И я проверил html-код, и я обнаружил, что скрытые поля содержат данные csrfToken и csrfParam. Я также проверил данные в почтовом запросе с пометкой. Там же - все в порядке –