Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/254.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Yii2 passwordHash返回不同的值_Php_Yii2 - Fatal编程技术网

Php Yii2 passwordHash返回不同的值

Php 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

我已经用Yii2开发了一些应用程序,但是在登录功能方面遇到了一些问题。密码似乎不匹配

\u 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]) ?>
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
  • 所以别介意
  • 可能数据库中的列长度太短,无法保存哈希