我在系统中登录并且密码验证每次都失败,只是说它的密码不正确。带有注释斜杠(//)的部分是引起麻烦的部分,我也在使用YII框架。
$users= Users::model()->findByAttributes(array('Email'=>$this->Email));
if($users===null) {
$this->errorCode = self::ERROR_USERNAME_INVALID;
}
//else if($users->validatePassword($this->Password)) {
// $this->errorCode = self::ERROR_PASSWORD_INVALID;
// echo 'failed here 2';
// }
else {
$this->errorCode = self::ERROR_NONE;
$this->_id = $users->UserID;
}
return !$this->errorCode;
}
public function getId() {
return $this->_id;
}
这是验证密码功能
public function validatePassword($password)
{
return $this->Password = hash('sha256',$this->Password);
}
答案 0 :(得分:1)
实际上这个功能存在一些问题
首先这个陈述是一个测试,它应该测试$ this->密码等于你作为参数传入的密码。
=
而不是==
所以它应编码为
public function validatePassword($password)
{
return $this->Password == hash('sha256',$password);
}
由于此方法存在于用户对象$this->Password
中,所以已加载到$users->Password
属性(我假设您已从数据库加载)并且您测试它等于从表单传递给脚本的纯文本密码的哈希值。
附加信息:
重新评论:这已经停止了无效密码错误,但它现在只接受任何旧密码
现在你需要查看测试调用固定函数结果的代码。
您的代码:
else if($users->validatePassword($this->Password)) {
$this->errorCode = self::ERROR_PASSWORD_INVALID;
echo 'failed here 2';
}
修正版:
else if( ! $users->validatePassword($this->Password)) {
$this->errorCode = self::ERROR_PASSWORD_INVALID;
echo 'failed here 2';
}
第二个附加信息:
您需要添加一些调试代码以查看您实际比较的数据,请尝试以下操作: -
$users= Users::model()->findByAttributes(array('Email'=>$this->Email));
echo '<pre>users object ' . print_r($users,true) . '</pre>';
echo 'The password we are testing = ' . $this->Password . '<br>';
if($users===null) {
$this->errorCode = self::ERROR_USERNAME_INVALID;
}
else if( ! $users->validatePassword($this->Password)) {
$this->errorCode = self::ERROR_PASSWORD_INVALID;
echo 'failed here 2';
}
else {
$this->errorCode = self::ERROR_NONE;
$this->_id = $users->UserID;
}
return !$this->errorCode;
}