Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.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
Yii2-验证密码(哈希无效错误)_Yii_Yii2 - Fatal编程技术网

Yii2-验证密码(哈希无效错误)

Yii2-验证密码(哈希无效错误),yii,yii2,Yii,Yii2,我试图验证旧用户密码,以便他能够更改密码,但目前我得到的哈希值无效错误 这是验证规则: ['password_old', function($attribute){ if(!$this->validatePassword($this->{$attribute})) $this->addError($attribute, 'Please Enter Your Old Password');

我试图验证旧用户密码,以便他能够更改密码,但目前我得到的哈希值无效错误

这是验证规则:

['password_old', function($attribute){
                if(!$this->validatePassword($this->{$attribute}))
                    $this->addError($attribute, 'Please Enter Your Old Password');
            }],
验证密码方法:

    public function validatePassword($password){
            return Yii::$app->getSecurity()->validatePassword($this->salt . $password, $this->password);
        }
用于更改密码的表单:

$form = ActiveForm::begin(
            [
                'enableAjaxValidation' => true,
                'action'               => 'user/changepassword',
                'id'                   => 'changePassword'
            ]
        );


    echo $form->field($model, 'password_old')->passwordInput( ['autocomplete' => 'off'] );
    echo $form->field($model, 'password')->passwordInput(['autocomplete' => 'off'])->label('New Password');
    echo $form->field($model, 'password_confirm')->passwordInput(['autocomplete' => 'off']);  
“哈希无效错误”,因为您的密码格式不正确

为什么?

  • 在验证规则中调用validatePassword时,
    $this->password
    不是存储在数据库中的密码,而是新密码-最近从表单提交。要解决问题,您可以参考
    yii2基本应用程序
    yii高级应用程序
    中的
    LoginForm
建议:

  • 不需要“Salt”,因为它是自动包含在函数
    \Yii::$app->security->generatePasswordHash
    (PHP5>=5.5.0
    密码\u hash

如果将null作为
$Hash
传递给
Yii::$app->getSecurity()->validatePassword
方法,则会出现哈希无效错误的另一个原因

我建议你在代码中做这样的检查

public function validatePassword($password){
        if(is_null($this->password)) 
            return false;
        return Yii::$app->getSecurity()->validatePassword($this->salt . $password, $this->password);
    }

当将DB中密码列的值从varchar(128)更改为varchar(255)并再次注册时,我解决了这个问题。

我也遇到了这个问题,并且解决了

原因是我以前使用过sha1算法,在将其转换为(
Yii::$app->security->generatePasswordHash
)后,我遇到了这个问题

我以前的密码是用sha1算法创建的,并且在数据库中。 当我将代码更改为新算法并想要登录时,我错了


如果使用新算法重置以前的密码,问题就解决了。

当数据库中比较的密码不能是散列值时,您将收到此错误! 当字段值
“$2y$13$TVLDZ5RGBL7CR1LR9JOVFOVERYMMWPD6X1DY9SYLNGZUIKEUEQIRY”(第一个字符是空格)。
我删除了空格字符,然后它就工作了。

为什么$this->salt?你是故意再加盐的吗?哈希密码已被加密。我不是100%确定,但看起来你比较$this->salt$带有$this->password和$this->password的密码是表单输入中的原始新密码,但您应该将其与旧密码哈希进行比较。我在用户的更改通行证中有此错误。如何解决这个问题。这里是什么盐?我的领域是文本,但我有问题