老项目数据迁移到 Yii2.0 后, 密码仍使用 md5 加密. 但是通过 yii2.0 的验证类的 validatePassword($password)函数验证始终返回 false:
- public function validatePassword($password){
- if(is_null($this->password))
- return false;
- return Yii::$app->getSecurity()->validatePassword($this->salt . $password, $this->password);
- }
因为 Yii 原生默认方式并非 md5 直接加密, 加密验证一般如下操作:
1.Yii2.0 加密及校验:
加密:
$hash_password = Yii::$app->security->generatePasswordHash('123456');
一般由 password_hash()处理加密, 可在该函数设置参数
校验:
$bool = Yii::$app->security->validatePassword($password, $hash_password);
$password 为输入的密码, 它是没有经过加密的字符串
$hash_password 为原先加密的密码
一般用法:
step1: 将密码'123456'加密为 $hash_password;
step2: 将 $hash_password 存入数据库;
step3: 从数据库中查询出密码, 赋给变量 $hash_password;
step4: 获取用户输入的密码, 赋给变量 $password;
step5: 校验密码, 返回 bool 值.
所以修改验证类中的 validatePassword 函数如下解决:
- public function validatePassword($password)
- {
- if(is_null($this->passwd)) return false;
- // return \Yii::$app->security->validatePassword($password, $this->password_hash);
- // return \Yii::$app->security->validatePassword($password, $this->passwd);
- if(md5($password)==$this->passwd) return true;
- }
来源: http://www.bubuko.com/infodetail-2701919.html