无法使用yii的passwordhelper验证散列密码

不确定有什么问题,但它说我的电子邮件/密码不正确.这仅在我的密码经过哈希处理时发生.只是寻找一个简单的密码哈希,我不需要复杂的东西.

在我的UserIdentity中.我尝试了几种方法,但没有一种方法可行.

//...stuff here

    $loginSuccess = false;
    if ($user->hashed === 'Y') {
    $loginSuccess = (md5($this->password) === $user->password);
    //$hash= CPasswordHelper::hashPassword($this->password);
    //  if(CPasswordHelper::verifyPassword($user->password, $hash))
    //      $loginSuccess=true;
            } else {
            $loginSuccess = ($this->password === $user->password);
        }
            // Login failure
        if($loginSuccess==false) {
//...stuff here

在我的控制器中:

$model=new LoginForm;
        // if it is ajax validation request
        if(Yii::app()->request->isAjaxRequest)
        {
            if(isset($_POST['LoginForm']))
            {
                $model->attributes=$_POST['LoginForm'];
                $password = $_POST['LoginForm']['password'];
                $hash = CPasswordHelper::hashPassword($password);

                if (CPasswordHelper::verifyPassword($model->password, $hash))
                {
                    if($model->validatePassword($password) && $model->login())
                    { //do stuff if okay

加入网站后:

if(isset($_POST['User']))
        {
            $model->attributes=$_POST['User'];
            $hash = CPasswordHelper::hashPassword($_POST['User']['password']);
            $model->password = $hash;

            if($model->validate())

最佳答案 检查代码/问题中的前两行注释行

  $hash= CPasswordHelper::hashPassword($this->password); and
  if(CPasswordHelper::verifyPassword($user->password, $hash))

在这里,您正在散列用户输入密码,并且您正在使用散列字符串验证散列字符串.这是一个简单的错误.在verifyPassword的情况下,您必须使用哈希字符串验证用户输入密码.

hashPassword从用户密码对和随机盐生成安全哈希.这就是您存储在数据库中的内容.在您的代码中,$user-> password返回用户密码的哈希值.

但是verifyPassword使用您存储在数据库中的哈希验证在登录页面中输入的密码.现在检查编码……

创建用户时

 $passHash=CPasswordHelper::hashPassword(trim($_POST['LoginForm']['password']));
 //Store this hash in Database

处理登录时

            //user input
            $pass='pa123456'; 

            //which is comming from db. In your case $user->password
            $hash='$2a$13$35cIyyLPznkG8xK.d0NbW.hBGl5fWDYaleZAN4cYECoNZ1C6BLaA6'; 

            //verify password
            if (CPasswordHelper::verifyPassword($pass, $hash))
            {
                echo "good";
            }
            else
            {
                echo "Bad";
            }
点赞