Password_hash () и password_verify () проблемы с Codeigniter 3.1.10 - PullRequest
0 голосов
/ 20 сентября 2019

Я пытаюсь создать функцию входа / регистрации, используя password_hash () и password_verify.

Вот простой код, который я написал.В результате я получаю «неверный пароль» при попытке войти в систему.

Чего мне не хватает?

Зарегистрировать контроллер

 public function register() {
    $email = $this->input->post('email');
    $password = password_hash($this->input->post('password'), PASSWORD_BCRYPT);

 $insert_db = $this->db->insert('users',[
        'email' => $email, 
        'password' => $password
}

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

База данных: поле: varchar (255)

Контроллер входа:

public function verifyLogin() {
 $email = $this->input->post('email');
 $password = ($this->input->post('pswd'));

 // load model 
 $this->load->model('Login_model');
 $account = $this->Login_model->verifyLogin($email, $password);

 if ($account) {
  //if user found, show success msg
    echo "successful login";
  } else {
    echo "invalid password";
  }

}

Модель входа

 public function verifyLogin($email, $password) { 
    $query = $this->db->where([ 'email'=> $email])
                      ->get('users');

    if ($query->num_rows() == 1) {

            // hash fetched from db 
            $record = $query->row();
            $dbPassword = $record->password;

            // Hash length showing 60         
               echo strlen($dbPassword);

            if (password_verify($password, $dbPassword)) {
                return true;
            } else {
                return false;
            }

    }

    }

Форма входа

<?= form_open('Login/verifyLogin'); ?>
<label>Email</label>
?php echo form_error('login-email);'?>
<?php echo form_input(['name'=>'login-email', 'value' => set_value('login-email')]); ?>
<label>Password</label>
<?php echo form_error('login-password'); ?>
<?php echo form_password(['name'=>'login-password', 'value' => set_value('login-password')]);?>
 <?php echo form_submit(['type' => 'submit', 'value' => 'Login']); ?>
<?= form_close(); ?>

Ответы [ 2 ]

0 голосов
/ 20 сентября 2019

у вас есть две ошибки

ваше имя поля пароля login-password, но вы пытаетесь получить pswd также, если пользователь не найден, вы должны вернуть false

Также для электронной почты этото же имя вашей формы login-email, но вы пытаетесь получить доступ к email

public function verifyLogin() {
 $email = $this->input->post('login-email');
 $password = ($this->input->post('login-password'));

 // load model 
 $this->load->model('Login_model');
 $account = $this->Login_model->verifyLogin($email, $password);

 if ($account) {
  //if user found, show success msg
    echo "successful login";
  } else {
    echo "invalid password";
  }

}

и

public function verifyLogin($email, $password) { 
    $query = $this->db->where([ 'email'=> $email])
                      ->get('users');

    if ($query->num_rows() == 1) {

            // hash fetched from db 
            $record = $query->row();
            $dbPassword = $record->password;

            // Hash length showing 60         
               echo strlen($dbPassword);

            if (password_verify($password, $dbPassword)) {
                return true;
            } else {
                return false;
            }
    }
    return false;

 }
0 голосов
/ 20 сентября 2019

Ваш код, кажется, работает, я проверял ..

...