paus
@paus
Backend-разработчик

Почему возникает Bad Request (#400) на форме в yii 2.0?

Есть форма:

<div data-role="page" id="login">
    <div data-role="header">
        <h2>Авторизация</h2>
    </div>
    <div role="main" class="ui-content jqm-content">
        <form role="form" action="/site/login" method="POST" id="login-form">
            <div class="ui-grid-solo">
                <div class="ui-grid-a">
                    <label for="username">Имя</label>
                    <input type="text" name="username" id="username" value="" data-clear-btn="true" data-mini="true">
                    <label for="password">Пароль</label>
                    <input type="password" name="password" id="password" value="" data-clear-btn="true" autocomplete="off" data-mini="true">

                    <input type="checkbox" name="remind" id="remind" value="1">
                    <label for="remind">Запомнить меня</label>
                    <br>
                    <input type="submit" value="Логин" onclick="this.form.submit();">
                </div>
            </div>
        </form>
    </div>
</div>


В SiteController перенаправляю на форму:

public function actionIndex()
    {

        if (\Yii::$app->user->isGuest) {
            return $this->render('login');
        }
        else {
            return $this->goBack();

        }
    }


В этом же SiteController идёт обработка actionLogin:

public function actionLogin()
    {
        if (!\Yii::$app->user->isGuest) {
            return $this->render('index');
        }

        $model = new LoginForm();
        if ($model->load(Yii::$app->request->post()) && $model->login()) {
            return $this->render('about');
        } else {
            return $this->render('contact');
        }
    }


В LoginForm:

public function rules()
    {
        return [
            [['username', 'password'], 'required'],
            ['remind', 'boolean'],
            ['password', 'validatePassword'],
        ];
    }

public function login()
    {
        if ($this->validate()) {
            return Yii::$app->user->login($this->getUser(), $this->remind ? 3600 * 24 * 30 : 0);
        } else {
            return false;
        }
    }


При отправке POST-сообщения возникает ошибка:

Bad Request (#400)

Unable to verify your data submission.
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.


В чём дело?
  • Вопрос задан
  • 32551 просмотр
Пригласить эксперта
Ответы на вопрос 4
@mrlipuzhin
<input type="hidden" name="_csrf" value="<?=Yii::$app->request->getCsrfToken()?>" />
Ответ написан
nepster-web
@nepster-web
Напомните почему вы используете обычную верстку, а не фитчи Yii2 ?

можно отключить проверку токена
https://github.com/yiisoft/yii2/blob/master/framew...

В вашем контроллере
$this->enableCsrfValidation = false;

Второй вариант это создать input в котором в качестве value указать токен:
https://github.com/yiisoft/yii2/blob/master/framew...

<input type="hidden" value="<?=Yii::$app->request->getCsrfToken()?>" />
Ответ написан
@developinwed
В layout в секцию head вставьте <?= Html::csrfMetaTags() ?>
Ответ написан
Комментировать
@alexandro5
Говнокодер
Всем привет!
Ребят ну у меня есть токен, в чем еще может быть проблема?
16d6f97045424fd888c3143d4b3ce2c4.jpg
в layout
75c7d81a367b43289c47f14b86fb9799.jpg
на локальном все работает (Open Server)
на сервере после загрузки работает ровно около 2 суток потом, ошибка + в backend появилась такая картина
14b643e205894ffa9ca8de6db0eb1e23.jpg

РНР на сервере

d65286aa688245afb7f6a7d093eff018.jpg

Версия Yii 2.0.4
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы