Php 通过检查当前密码和输入的密码来更改yii2密码
我试图在yii2高级应用程序中更改密码,但总是失败 我有一个模型,可以找到输入的密码并对照存储的密码进行检查,如果为真,则返回真,如果为假,则应失败 这是模型零件 这就是设置用户密码的原因Php 通过检查当前密码和输入的密码来更改yii2密码,php,yii2,Php,Yii2,我试图在yii2高级应用程序中更改密码,但总是失败 我有一个模型,可以找到输入的密码并对照存储的密码进行检查,如果为真,则返回真,如果为假,则应失败 这是模型零件 这就是设置用户密码的原因 public function setPassword($password) { $this->password = Yii::$app->security->generatePasswordHash($password); } 这是用来比较两个密码的 public fun
public function setPassword($password)
{
$this->password = Yii::$app->security->generatePasswordHash($password);
}
这是用来比较两个密码的
public function findPasswords($attribute, $params){
$user = UserIdentity::find()->where([
'username'=>Yii::$app->user->identity->username
])->one();
$password = $user->password_hash; //returns current password as stored in the dbase
$hash2 = Yii::$app->security->generatePasswordHash($this->oldpass); //generates an encrypted password
if($password!= $hash2)
{
$this->addError($attribute, 'Old password is incorrect');
}
}
如果旧密码不正确,此操作将始终返回。
我也试过了
var_dump(Yii::$app->security->generatePasswordHash(5378));
var_dump(Yii::$app->security->generatePasswordHash(5378));
上面的两个返回两个不同的值为什么
有什么不对吗
这是更新后的完整用户模型
我现在在获取未知属性时出错:app\models\UserPass::password\u hash
class UserPass extends Model{
public $oldpass;
public $newpass;
public $repeatnewpass;
public function rules(){
return [
[['oldpass','newpass','repeatnewpass'],'required'],
['oldpass','findPasswords'],
['repeatnewpass','compare','compareAttribute'=>'newpass'],
];
}
public function findPasswords($attribute, $params){
$user = UserIdentity::find()->where([
'username'=>Yii::$app->user->identity->username
])->one();
$valid = $this->validatePassword("53785378");
var_dump(validatePassword("53785378"));
die();
$password = $user->password_hash; //returns current password as stored in the dbase
$hash2 = Yii::$app->security->generatePasswordHash($this->oldpass); //generates an encrypted password
if($password!= $hash2)
{
$this->addError($attribute, 'Old password is incorrect');
}
}
public function attributeLabels(){
return [
'oldpass'=>'Old Password',
'newpass'=>'New Password',
'repeatnewpass'=>'Confirm Password',
];
}
public function validatePassword($password) {
return Yii::$app->security->validatePassword($password, $this->password_hash);
}
}
使用
validatePassword
方法,而不是从输入值生成密码散列并比较散列。这是一种来自用户
模型的方法,它扩展了ActiveRecord
:
/**
* Validates password
*
* @param string $password password to validate
* @return boolean if password provided is valid for current user
*/
public function validatePassword($password) {
return Yii::$app->security->validatePassword($password, $this->password_hash);
}
使用
validatePassword
方法,而不是从输入值生成密码散列并比较散列。这是一种来自用户
模型的方法,它扩展了ActiveRecord
:
/**
* Validates password
*
* @param string $password password to validate
* @return boolean if password provided is valid for current user
*/
public function validatePassword($password) {
return Yii::$app->security->validatePassword($password, $this->password_hash);
}
您应该使用
validatePassword
而不是像@similbi所说的那样比较散列,但要回答您的问题,即为什么会返回不同的结果
Yii::$app->security->generatePasswordHash(5738);
生成散列的过程需要生成一个随机salt,它每次都会产生不同的输出,的引用您应该使用
validatePassword
而不是像@similbi所说的那样比较散列,但要回答您关于为什么会返回不同结果的问题
Yii::$app->security->generatePasswordHash(5738);
生成散列的过程需要生成一个随机的salt,它每次都会导致不同的输出,的引用发生变化
$hash2 = Yii::$app->security->generatePasswordHash($this->oldpass);
if($password!= $hash2)
{
$this->addError($attribute, 'Old password is incorrect');
}
到
您需要使用validatePassword方法,而不是生成新的哈希(如@similbi所说)。
每次生成哈希值都会导致新哈希的oldpass和哈希的oldpass之间的比较失败。(根据@mhyasin的说法)改变
$hash2 = Yii::$app->security->generatePasswordHash($this->oldpass);
if($password!= $hash2)
{
$this->addError($attribute, 'Old password is incorrect');
}
到
您需要使用validatePassword方法,而不是生成新的哈希(如@similbi所说)。
每次生成哈希值都会导致新哈希的oldpass和哈希的oldpass之间的比较失败。(根据@mhyasin所说)我已经添加了它,但我知道hash的一个错误是无效的。该模型应该表示用户身份。按照yii2的说明来了解它到底是如何工作的我已经添加了它,但我知道得到一个错误hash是invalid模型应该代表用户身份。遵循yii2的说明,了解其具体工作原理