Bad Request (#400) и data-method="post"
Bad Request (#400) и data-method="post"
Внезапно появилась следующая ошибка и не могу выяснить почему
При переходе по ссылке
<a href="/site/logout" data-method="post">Выйти (username)</a>
Выдаёт ошибку
Bad Request (#400)
Не удалось проверить переданные данные.
The above error occurred while the Web server was processing your request.
Please contact us if you think this is a server error. Thank you.
То же самое при переходе по другой ссылке с data-method="post"
При переходе по ссылке
<a href="/site/logout" data-method="post">Выйти (username)</a>
Выдаёт ошибку
Bad Request (#400)
Не удалось проверить переданные данные.
The above error occurred while the Web server was processing your request.
Please contact us if you think this is a server error. Thank you.
То же самое при переходе по другой ссылке с data-method="post"
Re: Bad Request (#400) и data-method="post"
echo Html::csrfMetaTags(); прописано в layout?
Re: Bad Request (#400) и data-method="post"
Нет. Но ситуация такая, что до этого работало. И по какой причине перестало, я понять не могу.
Прописал по вашему совету и теперь действительно работает.
Благодарю за помощь.
Прописал по вашему совету и теперь действительно работает.
Благодарю за помощь.
Re: Bad Request (#400) и data-method="post"
причина: изменение в фреймворке.codrilla писал(а):Нет. Но ситуация такая, что до этого работало. И по какой причине перестало, я понять не могу.
Прописал по вашему совету и теперь действительно работает.
Благодарю за помощь.
Re: Bad Request (#400) и data-method="post"
Простой вызов <?php $this->head() ?> в layout также должен добавить нужные meta.
Re: Bad Request (#400) и data-method="post"
отчего же?webster писал(а):Простой вызов <?php $this->head() ?> в layout также должен добавить нужные meta.
Re: Bad Request (#400) и data-method="post"
Понятья не имею. Дебагером не изучал вызовы, но думаю если csrf активирован? то теги добавляются - это логично как бы.zelenin писал(а):отчего же?webster писал(а):Простой вызов <?php $this->head() ?> в layout также должен добавить нужные meta.
Вот у меня перед глазами примерно такой layout:
Код: Выделить всё
/**
* @var \yii\web\View $this
* @var string $content
*/
AppAsset::register($this);
?>
<?php $this->beginPage() ?>
<!DOCTYPE html >
<html lang="<?= Yii::$app->language ?>"
ng-app="..."
data-app-base-path="<?= Yii::$app->getRequest()->getBaseUrl() ?>">
<head>
<meta charset="<?= Yii::$app->charset ?>"/>
<meta name="viewport" content="width=device-width, initial-scale=1">
<title><?= Html::encode($this->title) ?></title>
<?php $this->head() ?>
</head>
<body>
<?php $this->beginBody() ?>
<div class="wrap">
<?php
NavBar::begin(
[
'brandLabel' => Yii::$app->name,
'brandUrl' => Yii::$app->homeUrl,
'options' => [
'class' => 'navbar-inverse navbar-fixed-top',
],
]
);
echo Nav::widget(
[
'options' => ['class' => 'navbar-nav navbar-right'],
'items' => [
[
'label' => 'Модели',
'url' => ['/frontend/models/index'],
'visible' => !Yii::$app->user->isGuest
],
[
'label' => 'Предложения',
'url' => ['/frontend/offer/index'],
'visible' => !Yii::$app->user->isGuest
],
[
'label' => 'Login',
'url' => ['/userManager/frontend/identity/login'],
'visible' => Yii::$app->user->isGuest
],
[
'label' => 'Logout',
'url' => ['/userManager/frontend/identity/logout'],
'linkOptions' => ['data-method' => 'post'],
'visible' => !Yii::$app->user->isGuest
],
],
]
);
NavBar::end();
?>
<div class="container">
<div class="container-fluid">
<div class="row" ng-view><?= $content ?></div>
</div>
</div>
</div>
<footer class="footer">
<div class="container">
<p class="pull-left">© <?= date('Y') ?></p>
<p class="pull-right"><?= Yii::powered() ?></p>
</div>
</footer>
<?php $this->endBody() ?>
</body>
</html>
<?php $this->endPage() ?>
Re: Bad Request (#400) и data-method="post"
когда последний раз обновляли фреймворк?)
Re: Bad Request (#400) и data-method="post"
Ха, и впрямь обновил и уже нет. Хотя вроде не так давно обновлял пакеты. Чем не нравилось им решение, удобно же было лишние телодвижения не надо было делать. Сделали бы хотя бы настройку в конфиге что ли. Бред какой-то, может бага, пофиксят.
Re: Bad Request (#400) и data-method="post"
там проблема была, что если письмо на емейл идет в хтмл, то цсрф тоже туда попадал, что как бы не логично
Re: Bad Request (#400) и data-method="post"
Всем привет!
Ребят ну у меня есть токен, в чем еще может быть проблема?
http://c2n.me/3ohoGra
в layout
http://c2n.me/3ohoO6U
на локальном все работает (Open Server)
на сервере после загрузки работает ровно около 2 суток потом, ошибка + в backend появилась такая картина
http://c2n.me/3ohp8Ra
РНР на сервере 5.4.45
Версия Yii 2.0.4
Ребят ну у меня есть токен, в чем еще может быть проблема?
http://c2n.me/3ohoGra
в layout
http://c2n.me/3ohoO6U
на локальном все работает (Open Server)
на сервере после загрузки работает ровно около 2 суток потом, ошибка + в backend появилась такая картина
http://c2n.me/3ohp8Ra
РНР на сервере 5.4.45
Версия Yii 2.0.4
Re: Bad Request (#400) и data-method="post"
Сейчас только столкнулся с той же проблемой и решил ее.
Дело в том, что данные csrf передаются через куки. Но срок жизни соответствующего ключа в куки меньше, чем у куки авторизации.
И когда фреймворк не видит этот ключ, то генерится новый и заново кладется в куки.
Но что-то мешает ему установить новый ключ. Как выяснилось, фреймворк пропускает установку куки в случае, если до этого момента какие-то хедеры были уже отправлены в http ответ сервера. Например, это происходит, когда скрип начинает писать в поток вывода до установки cookie.
Весь текст отображения (echo) должен попадать в буфер и потом этот результат выводится в поток вывода уже после установки всех хедеров, включая cookie.
Я забыл поставить <?php $this->beginPage() ?> в начале шаблона - это метод, который открывает буфер. Поэтому текст просто выводился сразу. Возможно, у вас в другом месте текст попадает поток.
Попробуйте написать в действии
без return. Вывод должен быть пустым. Если отображается вся страница или какой-то текст - значит у вас то, о чем я написал и надо искать, почему текст вывелся, а не попал в буфер.
Дело в том, что данные csrf передаются через куки. Но срок жизни соответствующего ключа в куки меньше, чем у куки авторизации.
И когда фреймворк не видит этот ключ, то генерится новый и заново кладется в куки.
Но что-то мешает ему установить новый ключ. Как выяснилось, фреймворк пропускает установку куки в случае, если до этого момента какие-то хедеры были уже отправлены в http ответ сервера. Например, это происходит, когда скрип начинает писать в поток вывода до установки cookie.
Весь текст отображения (echo) должен попадать в буфер и потом этот результат выводится в поток вывода уже после установки всех хедеров, включая cookie.
Я забыл поставить <?php $this->beginPage() ?> в начале шаблона - это метод, который открывает буфер. Поэтому текст просто выводился сразу. Возможно, у вас в другом месте текст попадает поток.
Попробуйте написать в действии
Код: Выделить всё
$this->render('index', [
'model' => $model,
]);