【发布时间】: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