Member 13053943 Ответов: 2

Хэш-пароль в codeigniter


Я хочу хэшировать свои пароли в codeigniter.Я не могу найти способ обойти это
это моя модель вставки, пароль шифруется при вставке данных клиента.
Я не могу расшифровать его при входе в систему

Что я уже пробовал:

<pre>public function insert_client($codeDigits)
    {
      $hash = $this->hash($_POST['Password']);
        $response = $this->taken_email($_POST['Email']);
        if($response){
            $returned = false;
        }else{
                $this->FirstName    = $_POST['FirstName']; // please read the below note
                $this->LastName    = $_POST['LastName'];
                $this->Email     = $_POST['Email'];  
                $this->Role_Id     = 2;  
                $this->Password = $hash;
                $this->PhoneNo    = $_POST['PhoneNo'];
                $this->confirmCode    = $codeDigits;
                $this->db->insert('users', $this);


                $returned = true;
            }
            
            return $returned;
        }


это моя хэш-модель пароля
public function hash($password)
   {
       $hash = password_hash($password,PASSWORD_DEFAULT);
       return $hash;
   }

   //verify password
   public function verifyHash($password,$vpassword)
   {
       if(password_verify($password,$vpassword))
       {
           return TRUE;
       }
       else{
           return FALSE;
       }
   }



во время входа в систему я не могу расшифровать пароль,пароль все равно шифруется в базе данных правильно.
public function login_model($email,$password)
   {
    
       $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)
       {
           $results = $query->row(); 
           // storing the results in the variable $data

           foreach($results as $data)
           {
               if($this->verifyHash($this->$password,$data->password == TRUE))
               {
                   $dat = array(
                'id_user' => $data->id_User,
                'FirstName' => $data->FirstName,
                'LastName' => $data->LastName,
                'Phonenumber' => $data->PhoneNo,                  
                'Email' => $data->Email,
                'role' => $data->Role_Id,
                'imageUrl' => $data->imageUrl,
                'category_id' => $data->category_id,
                'IdType' => $data->IdType,
                'IdNumber' => $data->IdNumber,
                'DOB' => $data->DOB,
                'confirmCode' => $data->confirmCode,
                'confirmed' => $data->confirmed,
                'Points'=> $data->Points                  
                   );
                }
            
               $this->session->set_userdata($dat); 
              return true;
            }        
       }
       else{
           return false;
        }
       
   }


это моя функция входа в контроллер
public function post_login()
	{

		$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_model($_POST['Email'],$_POST['Password'])){
                //test for redirect
            if($_SESSION['confirmed'] == true) {
                if ($_SESSION['role'] == 2) {


                    redirect("Client/welcome");

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

                    redirect("Pro/welcome");

                }

            }else{
                    redirect("Welcome/confirmCode");
            }

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

		}else{

			$this->login();
		}
	}

Как я могу расшифровать пароль при входе в систему?

2 Ответов

Рейтинг:
20

Patrice T

Цитата:
пароль шифруется при вставке данных клиента.
Я не могу расшифровать его при входе в систему

- Нет ! пароль не зашифрован, он хэшируется, и это 2 разных зверя.
По замыслу, хэш не может быть обращен вспять.
Хэш - функция- Википедия[^]


Member 13053943

@ppolymophe не могли бы вы помочь мне хэшировать пароль,когда они его вводят, сравнить его с тем, что есть в базе данных, чтобы они могли войти в систему

Richard Deeming

Удалите фильтр паролей из вашего запроса, так как необработанный пароль никогда не будет соответствовать хэшированному паролю:

$this->db->where('Password',$password);


У вас также кажется есть скобка в неправильном положении:
if($this->verifyHash($this->$password,$data->password == TRUE))
должно быть:
if($this->verifyHash($this->$password,$data->password) == TRUE)

Member 13053943

спасибо.я понял твою идею но она все равно не сработала

Рейтинг:
0

Member 13053943

я удалил это из запроса

$this->db->where('Password',$password);


и тоже изменился
if($this->verifyHash($this->$password,$data->password) == TRUE)


к:
if($this->verifyHash($password,$data->Password) == TRUE)