Хэш пароля и в Codeigniter - PullRequest
       21

Хэш пароля и в Codeigniter

0 голосов
/ 08 июня 2018

Я могу хешировать пароль при регистрации пользователя, но сравнивать их по пользовательскому вводу при входе в систему с тем, который указан в базе данных, не работает. При этом возникают ошибки.Это вставка для регистрации. Пожалуйста, покажите мне, где я ошибаюсь

 public function insert_client($codeDigits)
 {
    $options = ['cost'=>12];
    $response = $this->taken_email($_POST['Email']);
    if($response){
        $returned = false;
    }else{
            $this->FirstName    = $_POST['FirstName']; 
            $this->LastName    = $_POST['LastName'];
            $this->Email     = $_POST['Email'];  
            $this->Role_Id     = 2;  
            $this->Password =  password_hash($_POST['Password'],PASSWORD_BCRYPT,$options);
            $this->PhoneNo    = $_POST['PhoneNo'];
            $this->confirmCode    = $codeDigits;
            $this->db->insert('users', $this);
            $returned = true;
        }            
        return $returned;
    }

Это модель входа в систему, запрос на вход

 public function login_model2($email,$password)
 {   
   $options = ['cost'=>12];
   $this->db->select('*');
   $this->db->from('users');
   $this->db->where('Email',$email);
   //$this->db->where('Password',$password);
   $this->db->where('Role_Id !=',1);
   $query = $this->db->get();

   if($query->num_rows() > 0)
   {
       $data = $query->row(); 

       // storing the results in the variable $data        
           if(password_verify($password,$data->password))
           {           
              return true;
            }            
            else
            {
                return false;
                }                 
   }

   else
    {
       return false;
       }       
   }

Это функция контроллера входапри входе в систему

 public function post_login2()
{
    $this->form_validation->set_rules('Email', 'Email', 'trim|required|min_length[6]');
    $this->form_validation->set_rules('Password', 'Password', 'trim|required|min_length[6]');

    if($this->form_validation->run() == TRUE ){ 
        if($this->Users_model->login_model2($_POST['Email'],$_POST['Password']))
        {
            //test for redirect

            if ($_SESSION['role'] == 2) {

                redirect("Client/welcome");

            } else if ($_SESSION['role'] == 3) {

                redirect("Pro/welcome");

            }

          // test for redirect
        }else{
            // 
            $this->session->set_flashdata('err', true);
            redirect("Welcome/login");
        }

    }else{

        $this->login();
    }
}

1 Ответ

0 голосов
/ 08 июня 2018

Просто измените $data->password на $data->Password

В модели login_model2(), password_verify должно быть так:

if(password_verify($password,$data->Password))
{           
   return true;
}            
else
{
   return false;
} 
...