Php Yii2:在登录时设置错误的用户名或密码消息
我正在为我的应用程序使用Yi2 basic。当我输入错误的用户名或密码登录到我的应用程序时,它不会设置任何错误的用户名或密码之类的消息。浏览器只是刷新页面 这是我的站点/login.php文件:Php Yii2:在登录时设置错误的用户名或密码消息,php,yii2,yii2-basic-app,Php,Yii2,Yii2 Basic App,我正在为我的应用程序使用Yi2 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
<?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,
]);
}
任何帮助都将不胜感激。if($model->load())-语句根本不进行验证。它只是确定所讨论的表单是否已发布,以及发布数据是否已加载到表单实例中。我假设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()
函数,那么它也应该显示错误
正如@Sageth所指出的,基本应用程序的
登录功能确实运行了验证,因此我提出的更改将按预期工作。您可以在规则中添加自定义消息错误
public function rules()
{
return [
['username', 'required', 'message' => 'Please choose a username.'],
];
}
如果验证错误,它将创建一个JavaScript值并在消息中显示错误
请参阅和自定义错误消息
部分
编辑:
如果您使用的是基本应用程序,请确保您的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;
}
}
这是来自高级模板,但与之类似。这可以通过javascript验证实现吗?几乎任何事情都是可能的,您只需为其编写代码即可。如果你指的是这个,Yii不会开箱即用。你可能想修改你的答案,说明你实际上必须启用客户端验证才能让javascript工作(现在给人的印象是它就是这样做的)。此外,OP在操作中不调用验证函数,因此提及这一点可能也很方便。如果他使用基本应用程序,$model->login()
,应该进行验证。看来你是正确的。对不起。但我还是要补充一句关于客户验证选项的话:)我认为OP的意思是这样的: