Страница 1 из 2
Не удалось проверить переданные данные в login
Добавлено: 2015.03.03, 15:16
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}
Есть соображения о том где прокол?
Re: Не удалось проверить переданные данные в login
Добавлено: 2015.03.03, 15:19
Bezlepkin
Код?
Re: Не удалось проверить переданные данные в login
Добавлено: 2015.03.03, 15:24
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
]);
}
Re: Не удалось проверить переданные данные в login
Добавлено: 2015.03.03, 15:31
Bezlepkin
А куда ты отправляешь формы? По какому адресу?
Re: Не удалось проверить переданные данные в login
Добавлено: 2015.03.03, 15:35
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, но судя по всему он и не проходит валидацию
Re: Не удалось проверить переданные данные в login
Добавлено: 2015.03.03, 15:45
padlyuck
CSRF защита от кросс сайтовых атак. проверьте присутствуют ли у вас в результирующем html этих форм
значением ему должна быть малопонятная белиберда типа UHVzTDl0Tlc2RRwBdCQ5PAEURGFNDikNPjM8PHwmJw4BLwA0Xx8bBQ==
Re: Не удалось проверить переданные данные в login
Добавлено: 2015.03.03, 15:47
padlyuck
Кстати, нормально ли у вас сохраняются cookies? возможно токен портится до того как приходит форма от пользователя
Re: Не удалось проверить переданные данные в login
Добавлено: 2015.03.03, 15:47
Demon_id
wokster писал(а):У меня проблемы с пониманием того, что такое CsrfToken, но судя по всему он и не проходит валидацию
а он вообще в форме отправляется? или хотя бы есть в ней?
Re: Не удалось проверить переданные данные в login
Добавлено: 2015.03.03, 15:53
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;
}
Re: Не удалось проверить переданные данные в login
Добавлено: 2015.03.03, 15:55
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 строка
Re: Не удалось проверить переданные данные в login
Добавлено: 2015.03.03, 15:56
wokster
padlyuck писал(а):CSRF защита от кросс сайтовых атак. проверьте присутствуют ли у вас в результирующем html этих форм
значением ему должна быть малопонятная белиберда типа 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=="/>
Re: Не удалось проверить переданные данные в login
Добавлено: 2015.03.03, 15:58
wokster
Вот что отправляется:
Имя Значение
_csrf djFQa1JRN0gfWjRYajBdfQdHIQg2In4qEmAWUiIdaBkiQR4ACgYaOw==
LoginForm[username] admin
LoginForm[password] 34444
LoginForm[rememberMe] 0
LoginForm[rememberMe] 1
login-button Отправить
не могу понять почему дважды LoginForm[rememberMe]
Re: Не удалось проверить переданные данные в login
Добавлено: 2015.03.03, 16:01
Demon_id
wokster писал(а):не могу понять почему дважды LoginForm[rememberMe]
в yii checkbox() всегдатак работал. таким образом видно не только те чеки что выбраны, а также те что не выбраны.
в обычной хтмл реализации не выбранные чеки не отправляются вообще.
Re: Не удалось проверить переданные данные в login
Добавлено: 2015.03.03, 16:02
padlyuck
с настройками сессии/кукисов все нормально в php?
Re: Не удалось проверить переданные данные в login
Добавлено: 2015.03.03, 16:06
wokster
padlyuck писал(а):с настройками сессии/кукисов все нормально в php?
в конфиге:
Код: Выделить всё
'cache' => [
'class' => 'yii\caching\FileCache',
],
Как проверить нормально ли все с сессии/кукисов?
Re: Не удалось проверить переданные данные в login
Добавлено: 2015.03.03, 16:09
Bezlepkin
Так это после отправки формы или вообще?
Re: Не удалось проверить переданные данные в login
Добавлено: 2015.03.03, 16:09
Demon_id
wokster писал(а):padlyuck писал(а):с настройками сессии/кукисов все нормально в php?
в конфиге:
Код: Выделить всё
'cache' => [
'class' => 'yii\caching\FileCache',
],
это никак не относится ни к сессии, ни к кукам. это кеш.
Re: Не удалось проверить переданные данные в login
Добавлено: 2015.03.03, 16:10
Demon_id
а без всех этих табов форма логина нормально работает? и эти формы отправляются просто с перезагрузкой или аяксом?
Re: Не удалось проверить переданные данные в login
Добавлено: 2015.03.03, 16:10
wokster
Bezlepkin писал(а):Так это после отправки формы или вообще?
Ошибка после отправки формы
Кукисы и сесии не юзаю, поэтому хз. Должно быть все дефолтно
Re: Не удалось проверить переданные данные в login
Добавлено: 2015.03.03, 16:12
Bezlepkin
А в моделях все правильно?