关于后台编辑 user 密码 出现明码的情况处理

loader 4月前 202

在项目中,需要在后台为前台用户进行密码初始化。但是试来试去,创建的时候没问题(密码生成自己写的)。编辑用户的时候,只要编辑该用户的密码,其密码会保存为明码。image.png
当然这时候想的第一件事一般都是,保存明码,自己md5一下也无妨。于是乎就自己写了给md5.
image.png
现在高潮来了:自己写的MD5,生成密码后,密码盐自己变了。而且是在我的MD5之后。。我只能获取到老的salt,新salt怎么来的一头雾水。经过群里高人指点。才知道,fa在usermodel中,用户编辑密码的时候有专门处理。
image.png
但是这个处理貌似有漏洞,需要自己修改修改,在内层加上长度判断。
image.png
这样,不需要自己写MD5进行处理。只要edit传过来带有长度的password,model中会自动处理。

最新回复 (1)
  • loader 楼主 4月前
    感谢TA
    0 引用 2

    注意:是admin下的model。特别感谢群里 周大夫的无私指导。
    image.png
    这是他提供的代码:

    self::beforeUpdate(function ($row) {

            $changed = $row->getChangedData();
            //如果有修改密码
            if (isset($changed['password']))
            {
                if(strlen($changed['password'])>0)
                {
                    $salt = \fast\Random::alnum();
                    $row->password = \app\common\library\Auth::instance()->getEncryptPassword($changed['password'], $salt);
                    $row->salt = $salt;
                }
                else
                {
                    unset($row->password);
                }
            }
        });
    
    最后于 4月前 被loader编辑
  • 未登录
    3
返回