Хеширование и проверка пароля в CodeIgniter - PullRequest
0 голосов
/ 25 июня 2018

Таким образом, у меня возникла проблема, при которой я пытаюсь войти в систему пользователя с паролем хранилища в базе данных:

В настоящее время у меня есть это для моей функции входа и модели:

Контроллер:

$username = $this->input->post('username');    
$password = $this->input->post('password');
$enc_password = password_hash($password, PASSWORD_DEFAULT);
$data_user = $this->User_model->login($username, $enc_password);

Модель:

public function login($username, $enc_password)
{
    $this->db->where('username', $username);
    $this->db->where("password", $enc_password);
    $this->db->where("password2", $enc_password);

    $query = $this->db->get($this->table);

    $hashed_password = $enc_password;

    if (password_verify($hashed_password, $hashed_password)) {
        return $query->row();
    } else {
        return false;
    }
}

Может кто-нибудь сказать мне, где моя ошибка? Я пытаюсь войти в систему пользователя после того, как введенный пароль совпадает с «паролем» и «паролем2», которые созданы одинаково (в функции регистрации; тот же хэш пароля), но по какой-то причине он не позволяет мне это, даже когда Я ввожу правильный пароль. : /

Заранее спасибо.

Ответы [ 2 ]

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

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

$username = $this->input->post('username');    
$password = $this->input->post('password');
$data_user = $this->User_model->login($username, $password);

В вашей модели

public function login($username, $password)
{
   $query = $this->db->query("SELECT * from table where username = $username");

    $row = $query->row();


    if (password_verify($password,$row->password)) {
        return $query->row();
    } else {
        return false;
    }
}
0 голосов
/ 25 июня 2018

Точно так же, как я упомянул в комментариях, не трогайте (не применяйте) что-либо к вводимому паролю. Сначала выберите строку в соответствии с именем пользователя. Получите хешированный пароль и сравните его с введенным паролем.

Вот идея:

public function login($username, $password)
{
    // fetch by username first
    $this->db->where('username', $username);
    $query = $this->db->get($this->table);
    $result = $query->row_array(); // get the row first

    if (!empty($result) && password_verify($password, $result['password'])) {
        // if this username exists, and the input password is verified using password_verify
        return $result;
    } else {
        return false;
    }
}

Просто убедитесь, что у вас есть password_hash ed пароль в вашей таблице пользователей (я полагаю, вы уже обработали эту часть).

Таким образом, использование будет выглядеть так:

$username = $this->input->post('username');    
$password = $this->input->post('password');
$data_user = $this->User_model->login($username, $password);

Просто введите пароль, нет необходимости хешировать его при входе в систему. Вы используете password_hash при регистрации.

...