我已经使用Yii2制作了一些应用程序,但这里的登录功能有些问题。密码似乎不匹配。
_form.php这个
<?= $form->field($model, 'first_name')->textInput(['maxlength' => true]) ?>
<?= $form->field($model, 'last_name')->textInput(['maxlength' => true]) ?>
<?= $form->field($model, 'email')->textInput(['maxlength' => true]) ?>
<?= $form->field($model, 'pass')->passwordInput(['maxlength' => true]) ?>
user.php的
public function beforeSave($insert)
{
if($this->isNewRecord)
{
$this->pass = Yii::$app->getSecurity()->generatePasswordHash($this->pass);
}
return parent::beforeSave($insert);
}
LoginForm.php
public function validatePassword($attribute, $params)
{
if (!$this->hasErrors()) {
$user = $this->getUser();
echo 'current: ' . $user->pass;
echo '<br />';
echo 'plain: ' . Yii::$app->getSecurity()->generatePasswordHash('Password');
echo '<br />';
echo 'function: ' . $user->validatePassword($this->pass);
if (!$user || !$user->validatePassword($this->pass)) {
$this->addError($attribute, 'Incorrect user or password.');
}
}
}
我的电子邮件和密码在这里失败了。我回答了一些要检查的事情。来自DB的用户值始终相同,我传递"Password"
的普通版本始终返回不同的哈希,第三个print_r()
不返回任何内容。我不确定我在这里做错了什么?
答案 0 :(得分:2)
检查此代码:
$password = 'Password';
$passwordHash = Yii::$app->getSecurity()->generatePasswordHash($password);
Yii::$app->getSecurity()->validatePassword($password, $passwordHash);
你应该:
generatePasswordHash
的写入结果更正为数据库validatePassword
方法像这样写出正确的user->validatePassword
方法:
public function validatePassword($password)
{
return Yii::$app->security->validatePassword($password, $this->password_hash);
}
答案 1 :(得分:-1)