Не удалось проверить переданные данные в login

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Аватара пользователя
wokster
Сообщения: 308
Зарегистрирован: 2013.09.06, 14:12
Контактная информация:

Не удалось проверить переданные данные в login

Сообщение wokster »

Сделал регистрацию и вход в табах на одной странице
Получаю ошибку:

Код: Выделить всё

exception 'yii\web\BadRequestHttpException' with message 'Не удалось проверить переданные данные.' in /var/www/user15354/data/www/prodamgitaru.ru/vendor/yiisoft/yii2/web/Controller.php:110
Stack trace:
#0 /var/www/user15354/data/www/prodamgitaru.ru/vendor/yiisoft/yii2/base/Controller.php(149): yii\web\Controller->beforeAction(Object(yii\base\InlineAction))
#1 /var/www/user15354/data/www/prodamgitaru.ru/vendor/yiisoft/yii2/base/Module.php(455): yii\base\Controller->runAction('login', Array)
#2 /var/www/user15354/data/www/prodamgitaru.ru/vendor/yiisoft/yii2/web/Application.php(83): yii\base\Module->runAction('site/login', Array)
#3 /var/www/user15354/data/www/prodamgitaru.ru/vendor/yiisoft/yii2/base/Application.php(375): yii\web\Application->handleRequest(Object(common\components\Request))
#4 /var/www/user15354/data/www/prodamgitaru.ru/frontend/web/index.php(18): yii\base\Application->run()
#5 {main}
 
Есть соображения о том где прокол?
Аватара пользователя
wokster
Сообщения: 308
Зарегистрирован: 2013.09.06, 14:12
Контактная информация:

Re: Не удалось проверить переданные данные в login

Сообщение wokster »

Bezlepkin писал(а):Код?
view общий с табами:

Код: Выделить всё

<?php
use yii\helpers\Html;
use yii\bootstrap\Tabs;

/* @var $this yii\web\View */
/* @var $form yii\bootstrap\ActiveForm */
/* @var $modellog \frontend\models\SignupForm */

$this->title = 'Регистрация';
$this->params['breadcrumbs'][] = $this->title;
?>
<div class="site-signup">
    <h1><?= Html::encode($this->title) ?></h1>

    <p>Пожалуйста, заполните поля:</p>

    <div class="row">
        <?php
        $reg = $this->render('_signup', ['model'=>$model]);
        $log = $this->render('_login', ['model'=>$modellog]);
        echo Tabs::widget([
            'items' => [
                [
                    'label' => 'Регистрация',
                    'content' => $reg,
                    'active' => true
                ],
                [
                    'label' => 'Вход',
                    'content' => $log,
                ],
            ]
        ]);
        ?>
    </div>
</div>
view _login

Код: Выделить всё

<?php
use yii\helpers\Html;
use yii\bootstrap\ActiveForm;
?>
<h1><?= Html::encode($this->title) ?></h1>

    <p>Пожалуйста, заполните поля:</p>

    <div class="row">
        <div class="col-lg-5">
            <?php
            $form = ActiveForm::begin(['id' => 'login-form', 'action' => 'login']); ?>
                <?= $form->field($model, 'username') ?>
                <?= $form->field($model, 'password')->passwordInput() ?>
                <?= $form->field($model, 'rememberMe')->checkbox() ?>
                <div style="color:#999;margin:1em 0">
                    Если Вы забыли пароль <?= Html::a('нажмите меня', ['site/request-password-reset']) ?>.
                </div>
                <div class="form-group">
                    <?= Html::submitButton('Войти', ['class' => 'btn btn-primary', 'name' => 'login-button']) ?>
                </div>
            <?php ActiveForm::end(); ?>
        </div>
    </div>
view _signup

Код: Выделить всё

<?php
use yii\helpers\Html;
use yii\bootstrap\ActiveForm;
?>
    <h1><?= Html::encode($this->title) ?></h1>

    <p>Пожалуйста, заполните поля:</p>

    <div class="row">
        <div class="col-lg-5">
            <?php
            $form = ActiveForm::begin(['id' =>'form-signup', 'action' => 'signup']); ?>
                <?= $form->field($model, 'username') ?>
                <?= $form->field($model, 'email') ?>
                <?= $form->field($model, 'password')->passwordInput() ?>
            <h2>Контактные данные:</h2>
            <p>Эти данные используются при создании объявлений, заполните те, которые считаете нужными.</p>
            <?= $form->field($model, 'tel') ?>
            <?= $form->field($model, 'vk') ?>
            <?= $form->field($model, 'od') ?>
            <?= $form->field($model, 'fb') ?>
            <?= $form->field($model, 'site') ?>
            <?= $form->field($model, 'name') ?>

                <div class="form-group">
                    <?= Html::submitButton('Зарегистрироваться', ['class' => 'btn btn-primary', 'name' =>'signup-button']) ?>
                </div>
            <?php ActiveForm::end(); ?>
        </div>
    </div>
контролер

Код: Выделить всё

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

        $model = new SignupForm();
        $modellog = new LoginForm();
        if ($modellog->load(Yii::$app->request->post()) && $modellog->login()) {
            return $this->goBack();
        } else {
            return $this->render('signup', [
                'model' => $model, 'modellog'=>$modellog
            ]);
        }
    }
    public function actionSignup()
    {
        $model = new SignupForm();
        $modellog = new LoginForm();
        if ($model->load(Yii::$app->request->post())) {
            if ($user = $model->signup()) {
                if (Yii::$app->getUser()->login($user)) {
                    return $this->goHome();
                }
            }
        }

        return $this->render('signup', [
            'model' => $model, 'modellog'=>$modellog
        ]);
    }
 
Аватара пользователя
Bezlepkin
Сообщения: 731
Зарегистрирован: 2012.11.10, 18:59
Контактная информация:

Re: Не удалось проверить переданные данные в login

Сообщение Bezlepkin »

А куда ты отправляешь формы? По какому адресу?
Аватара пользователя
wokster
Сообщения: 308
Зарегистрирован: 2013.09.06, 14:12
Контактная информация:

Re: Не удалось проверить переданные данные в login

Сообщение wokster »

К этим экшенам контролера signup и login соответственно

Ошибка лезет отсюда

Код: Выделить всё

public function beforeAction($action)
    {
        if (parent::beforeAction($action)) {
            if ($this->enableCsrfValidation && Yii::$app->getErrorHandler()->exception === null && !Yii::$app->getRequest()->validateCsrfToken()) {
                throw new BadRequestHttpException(Yii::t('yii', 'Unable to verify your data submission.'));
            }
            return true;
        } else {
            return false;
        }
    }
У меня проблемы с пониманием того, что такое CsrfToken, но судя по всему он и не проходит валидацию
padlyuck
Сообщения: 302
Зарегистрирован: 2015.02.03, 09:50

Re: Не удалось проверить переданные данные в login

Сообщение padlyuck »

CSRF защита от кросс сайтовых атак. проверьте присутствуют ли у вас в результирующем html этих форм

Код: Выделить всё

<input type="hidden" name="_csrf"...>
значением ему должна быть малопонятная белиберда типа UHVzTDl0Tlc2RRwBdCQ5PAEURGFNDikNPjM8PHwmJw4BLwA0Xx8bBQ==
Последний раз редактировалось padlyuck 2015.03.03, 15:48, всего редактировалось 1 раз.
padlyuck
Сообщения: 302
Зарегистрирован: 2015.02.03, 09:50

Re: Не удалось проверить переданные данные в login

Сообщение padlyuck »

Кстати, нормально ли у вас сохраняются cookies? возможно токен портится до того как приходит форма от пользователя
Demon_id
Сообщения: 421
Зарегистрирован: 2011.10.29, 00:13

Re: Не удалось проверить переданные данные в login

Сообщение Demon_id »

wokster писал(а):У меня проблемы с пониманием того, что такое CsrfToken, но судя по всему он и не проходит валидацию
а он вообще в форме отправляется? или хотя бы есть в ней?
Аватара пользователя
Bezlepkin
Сообщения: 731
Зарегистрирован: 2012.11.10, 18:59
Контактная информация:

Re: Не удалось проверить переданные данные в login

Сообщение Bezlepkin »

CsrfToken это некая шифрованная строка (токен) который обычно передается в асинхронных POST запросах и на стороне сервера сверяется.

А зачем вообще у тебя такая проверка?

Код: Выделить всё

        if (parent::beforeAction($action)) {
            if ($this->enableCsrfValidation && Yii::$app->getErrorHandler()->exception === null && !Yii::$app->getRequest()->validateCsrfToken()) {
                throw new BadRequestHttpException(Yii::t('yii', 'Unable to verify your data submission.'));
            }
            return true;
        } else {
            return false;
        }

 
Demon_id
Сообщения: 421
Зарегистрирован: 2011.10.29, 00:13

Re: Не удалось проверить переданные данные в login

Сообщение Demon_id »

Bezlepkin писал(а):CsrfToken это некая шифрованная строка (токен) который обычно передается в асинхронных POST запросах и на стороне сервера сверяется.

А зачем вообще у тебя такая проверка?

Код: Выделить всё

        if (parent::beforeAction($action)) {
            if ($this->enableCsrfValidation && Yii::$app->getErrorHandler()->exception === null && !Yii::$app->getRequest()->validateCsrfToken()) {
                throw new BadRequestHttpException(Yii::t('yii', 'Unable to verify your data submission.'));
            }
            return true;
        } else {
            return false;
        }

yii\web\Controller - 109 строка
Аватара пользователя
wokster
Сообщения: 308
Зарегистрирован: 2013.09.06, 14:12
Контактная информация:

Re: Не удалось проверить переданные данные в login

Сообщение wokster »

padlyuck писал(а):CSRF защита от кросс сайтовых атак. проверьте присутствуют ли у вас в результирующем html этих форм

Код: Выделить всё

<input type="hidden" name="_csrf"...>
значением ему должна быть малопонятная белиберда типа UHVzTDl0Tlc2RRwBdCQ5PAEURGFNDikNPjM8PHwmJw4BLwA0Xx8bBQ==
есть в html 4 упоминания

Код: Выделить всё

<meta name="csrf-param" content="_csrf"/>
<meta name="csrf-token" content="djFQa1JRN0gfWjRYajBdfQdHIQg2In4qEmAWUiIdaBkiQR4ACgYaOw=="/>
<input type="hidden" name="_csrf" value="djFQa1JRN0gfWjRYajBdfQdHIQg2In4qEmAWUiIdaBkiQR4ACgYaOw=="/>
<input type="hidden" name="_csrf" value="djFQa1JRN0gfWjRYajBdfQdHIQg2In4qEmAWUiIdaBkiQR4ACgYaOw=="/>
 
Аватара пользователя
wokster
Сообщения: 308
Зарегистрирован: 2013.09.06, 14:12
Контактная информация:

Re: Не удалось проверить переданные данные в login

Сообщение wokster »

Вот что отправляется:
Имя Значение
_csrf djFQa1JRN0gfWjRYajBdfQdHIQg2In4qEmAWUiIdaBkiQR4ACgYaOw==
LoginForm[username] admin
LoginForm[password] 34444
LoginForm[rememberMe] 0
LoginForm[rememberMe] 1
login-button Отправить


не могу понять почему дважды LoginForm[rememberMe]
Demon_id
Сообщения: 421
Зарегистрирован: 2011.10.29, 00:13

Re: Не удалось проверить переданные данные в login

Сообщение Demon_id »

wokster писал(а):не могу понять почему дважды LoginForm[rememberMe]
в yii checkbox() всегдатак работал. таким образом видно не только те чеки что выбраны, а также те что не выбраны.
в обычной хтмл реализации не выбранные чеки не отправляются вообще.
padlyuck
Сообщения: 302
Зарегистрирован: 2015.02.03, 09:50

Re: Не удалось проверить переданные данные в login

Сообщение padlyuck »

с настройками сессии/кукисов все нормально в php?
Аватара пользователя
wokster
Сообщения: 308
Зарегистрирован: 2013.09.06, 14:12
Контактная информация:

Re: Не удалось проверить переданные данные в login

Сообщение wokster »

padlyuck писал(а):с настройками сессии/кукисов все нормально в php?
в конфиге:

Код: Выделить всё

        'cache' => [
            'class' => 'yii\caching\FileCache',
        ],
 
Как проверить нормально ли все с сессии/кукисов?
Аватара пользователя
Bezlepkin
Сообщения: 731
Зарегистрирован: 2012.11.10, 18:59
Контактная информация:

Re: Не удалось проверить переданные данные в login

Сообщение Bezlepkin »

Так это после отправки формы или вообще?
Demon_id
Сообщения: 421
Зарегистрирован: 2011.10.29, 00:13

Re: Не удалось проверить переданные данные в login

Сообщение Demon_id »

wokster писал(а):
padlyuck писал(а):с настройками сессии/кукисов все нормально в php?
в конфиге:

Код: Выделить всё

        'cache' => [
            'class' => 'yii\caching\FileCache',
        ],
 
это никак не относится ни к сессии, ни к кукам. это кеш. :)
Demon_id
Сообщения: 421
Зарегистрирован: 2011.10.29, 00:13

Re: Не удалось проверить переданные данные в login

Сообщение Demon_id »

а без всех этих табов форма логина нормально работает? и эти формы отправляются просто с перезагрузкой или аяксом?
Последний раз редактировалось Demon_id 2015.03.03, 16:11, всего редактировалось 1 раз.
Аватара пользователя
wokster
Сообщения: 308
Зарегистрирован: 2013.09.06, 14:12
Контактная информация:

Re: Не удалось проверить переданные данные в login

Сообщение wokster »

Bezlepkin писал(а):Так это после отправки формы или вообще?
Ошибка после отправки формы

Кукисы и сесии не юзаю, поэтому хз. Должно быть все дефолтно
Аватара пользователя
Bezlepkin
Сообщения: 731
Зарегистрирован: 2012.11.10, 18:59
Контактная информация:

Re: Не удалось проверить переданные данные в login

Сообщение Bezlepkin »

А в моделях все правильно?
Ответить