Yii2: установить неверное имя пользователя или пароль при входе

Я использую yii2 basic для своего приложения. Когда я вхожу в свое приложение, введя неправильное имя пользователя или пароль, оно не устанавливает никаких сообщений, таких как неправильное имя пользователя или пароль. Браузер просто обновляет страницу.

Это мое сайт / login.php файл:

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

/* @var $this yii\web\View */
/* @var $form yii\bootstrap\ActiveForm */
/* @var $model app\models\LoginForm */

$this->title = 'Login';
$this->params['breadcrumbs'][] = $this->title;
?>
<div class="site-login">
<h1><?= Html::encode($this->title) ?></h1>

<p>Please fill out the following fields to login:</p>

<?php $form = ActiveForm::begin([
'id' => 'login-form',
'options' => ['class' => 'form-horizontal'],
'fieldConfig' => [
'template' => "{label}\n<div class=\"col-lg-3\">{input}</div>\n<div class=\"col-lg-8\">{error}</div>",
'labelOptions' => ['class' => 'col-lg-1 control-label'],
],
]); ?>

<?= $form->field($model, 'username') ?>

<?= $form->field($model, 'password')->passwordInput() ?>

<?= $form->field($model, 'rememberMe')->checkbox([
'template' => "<div class=\"col-lg-offset-1 col-lg-3\">{input} {label}</div>\n<div class=\"col-lg-8\">{error}</div>",
]) ?>

<div class="form-group">
<div class="col-lg-offset-1 col-lg-11">
<?= Html::submitButton('Login', ['class' => 'btn btn-primary', 'name' => 'login-button']) ?>
</div>
</div>

<?php ActiveForm::end(); ?>

<!--  <div class="col-lg-offset-1" style="color:#999;">
You may login with <strong>admin/admin</strong> or <strong>demo/demo</strong>.<br>
To modify the username/password, please check out the code <code>app\models\User::$users</code>.
</div> -->
</div>

И вот мое действие для входа в систему:

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

$model = new LoginForm();
if ($model->load(Yii::$app->request->post())) {

$model->password = md5($model->password);
$model->login();
return $this->redirect(['site/index']);
}
return $this->render('login', [
'model' => $model,
]);
}

Любая помощь будет принята с благодарностью.

2

Решение

Вы можете добавить пользовательское сообщение об ошибке в ваши правила.

public function rules()
{
return [
['username', 'required', 'message' => 'Please choose a username.'],
];
}

Это создает проверку JavaScript и показывает ошибку в message если проверка была неправильной.

Увидеть Проверка ввода а также Customizing Error Messages раздел.

РЕДАКТИРОВАТЬ:

Если вы используете базовое приложение, убедитесь, что ваш LoginForm.php имеет форму входа звонки validate, Что-то вроде этого:

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

Это из расширенного шаблона, но похоже.

3

Другие решения

if ($model->load())Заявление не делает проверки вообще. Он просто определяет, была ли рассматриваемая форма POST введена и что данные POST были загружены в экземпляр формы. Я предполагаю, что login() функция возвращает bool так что вам также нужно проверить результат возврата:

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

$model = new LoginForm();
if ($model->load(Yii::$app->request->post())) {

$model->password = md5($model->password);
if ($model->login()) {
return $this->redirect(['site/index']);
}
}
return $this->render('login', [
'model' => $model,
]);
}

Если функция входа в систему правильно использует model::addError() Функция должна также отображать ошибки.

login-функция базового приложения выполняет проверку, как указывало @Sageth, поэтому предложенное мной изменение будет работать, как и ожидалось.

2

По вопросам рекламы [email protected]