【问题标题】:Update password in backend in yii2yii2后台更新密码
【发布时间】:2016-02-10 16:42:01
【问题描述】:

我在 Yii2 Advanced-后端做了 CRUD。我使用类扩展 ActiveRecord。而且我的密码属性有问题,当我想更新它时,它会显示带有很多点的散列密码,当我尝试更新它时,它不会保存散列密码。所以我使用 beforeSave 来散列我的密码:

public function beforeSave($insert)
{
    if (parent::beforeSave($insert)) {
        if($this->isNewRecord) {
            $this->created_at = time();
            $this->status = self::DEFAULT_STATUS;
            $this->generateAuthKey();
            $this->setPassword($this->PasswordHash);
            $this->RulesAccept=1;
            return true;
        } else {
            $this->setPassword($this->PasswordHash);
            return true;
        }
    } 
}

我不知道该怎么做,当我显示更新表单时,它会显示哈希密码中的点,如果您不更改密码也不会更改。目前,每次单击更新我的密码都会更改或重新散列。我怎样才能避免这种情况。我试图以这样的形式使用空值:

<label class="control-label"> <?= Yii::t('app', 'Hasło')?> </label>
<?= $form->field($model, 'PasswordHash')->passwordInput(['placeholder' => Yii::t('app', 'Utwórz hasło'), 'value' => ''])->label('') ?>

然后我尝试检查我的 beforeSave() 如果输入表单为空然后不保存此密码,只需将其保留在数据库中即可:

public function beforeSave($insert)
{
    if (parent::beforeSave($insert)) {
        if($this->isNewRecord) {
            $this->created_at = time();
            $this->status = self::DEFAULT_STATUS;
            $this->generateAuthKey();
            $this->setPassword($this->PasswordHash);
            $this->RulesAccept = 1;
            return true;
        } else {
            if((!empty)$this->PasswordHash)){
                $this->setPassword($this->PasswordHash);
                return true;
            }
            return false;
        }
    } 
}

所以当我以更新的形式出现时,我总是看到空的密码输入。如果我不写新密码,它只会更改我更改的所有属性,但如果我写了一些密码,它会为我保存这个新密码。我认为这个功能应该可以工作,但我错了,这个表格总是改变密码。我能做些什么来解决这个问题。也许还有其他方法?

【问题讨论】:

  • 它甚至可以从我的数据库中显示一个点哈希密码,但是当我点击更新时它不应该覆盖我的密码,当我删除这个虚线并写下新密码(6 个字母)时,这应该会为我保存新密码并且可以再次显示散列密码中的很多点。我该怎么做才能修复它?

标签: passwords yii2 yii2-advanced-app password-hash


【解决方案1】:

你可以使用 $this->isAttributeChanged('password_field')

public function beforeSave($insert)
{
    if (parent::beforeSave($insert)) {
        if ($this->isAttributeChanged('PasswordHash')) {
            $this->setPassword($this->PasswordHash);
        }
        return true;
    } else {
        return false;
    }
}

【讨论】:

    猜你喜欢
    • 2023-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多