密码验证始终失败

时间:2014-08-05 09:41:21

标签: php validation yii passwords

我在系统中登录并且密码验证每次都失败,只是说它的密码不正确。带有注释斜杠(//)的部分是引起麻烦的部分,我也在使用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);
}

1 个答案:

答案 0 :(得分:1)

实际上这个功能存在一些问题

首先这个陈述是一个测试,它应该测试$ this->密码等于你作为参数传入的密码。

  1. 你实际上并没有在测试中使用参数
  2. 当您使用=而不是==
  3. 时,它不是测试

    所以它应编码为

    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;
    }