首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在yii2后台更新密码

在yii2后台更新密码
EN

Stack Overflow用户
提问于 2016-02-11 00:42:01
回答 1查看 396关注 0票数 0

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

代码语言:javascript
复制
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;
        }
    } 
}

我不知道如何才能做到这一点,当我显示更新表单,它显示我的点从散列密码,如果你不改变密码也不会改变。当前,每次单击Update my password都会更改或重新散列。我怎么才能避免这种情况。我尝试在如下形式中使用空值:

代码语言:javascript
复制
<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(),如果输入表单为空,则不保存此密码,只保留它在数据库中的原样:

代码语言:javascript
复制
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;
        }
    } 
}

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

EN

回答 1

Stack Overflow用户

发布于 2016-07-12 08:39:35

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

代码语言:javascript
复制
public function beforeSave($insert)
{
    if (parent::beforeSave($insert)) {
        if ($this->isAttributeChanged('PasswordHash')) {
            $this->setPassword($this->PasswordHash);
        }
        return true;
    } else {
        return false;
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35320968

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档