Php Yii2 passwordHash返回不同的值
我已经用Yii2开发了一些应用程序,但是在登录功能方面遇到了一些问题。密码似乎不匹配 \u form.phpPhp Yii2 passwordHash返回不同的值,php,yii2,Php,Yii2,我已经用Yii2开发了一些应用程序,但是在登录功能方面遇到了一些问题。密码似乎不匹配 \u form.php <?= $form->field($model, 'first_name')->textInput(['maxlength' => true]) ?> <?= $form->field($model, 'last_name')->textInput(['maxlength' => true]) ?> <?= $form
<?= $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]) ?>
public function beforeSave($insert)
{
if($this->isNewRecord)
{
$this->pass = Yii::$app->getSecurity()->generatePasswordHash($this->pass);
}
return parent::beforeSave($insert);
}
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.');
}
}
}
LoginForm.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]) ?>
public function beforeSave($insert)
{
if($this->isNewRecord)
{
$this->pass = Yii::$app->getSecurity()->generatePasswordHash($this->pass);
}
return parent::beforeSave($insert);
}
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.');
}
}
}
公共函数validatePassword($attribute,$params)
{
如果(!$this->hasErrors()){
$user=$this->getUser();
回显“当前:”。$user->pass;
回声“
”;
echo“plain:”.Yii::$app->getSecurity()->generatePasswordHash('Password');
回声“
”;
echo“function:”。$user->validatePassword($this->pass);
如果(!$user |!$user->validatePassword($this->pass)){
$this->addError($attribute,“不正确的用户或密码”);
}
}
}
我的电子邮件和密码在此失败。我重复了一些要检查的东西。数据库中的用户值总是相同的,我传递的普通版本“Password”
总是返回一个不同的哈希值,而第三个print\r()
则不返回任何值。我不确定我做错了什么?检查以下代码:
$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);
}
- 如果执行print_r(),则generatePasswordHash函数将始终创建不同的值
- 但是如果密码字符串正确,validatePassword函数总是返回true
- 所以别介意
- 可能数据库中的列长度太短,无法保存哈希