Войдите в CodeIgniter с паролем - PullRequest
0 голосов
/ 09 января 2019

Я пытаюсь добиться реализации входа в CodeIgniter, я хэширую пароль при регистрации, как password_hash($this->input->post('password'),PASSWORD_DEFAULT) в моем контроллере и в том же контроллере, я пытаюсь написать метод входа, который выглядит следующим образом:

public function loginValidation() {
        $this->form_validation->set_rules('email', 'Email', 'trim|required');
        $this->form_validation->set_rules('password', 'Password', 'trim|required');

        if ($this->form_validation->run()) {
            // true
            $email  =   $this->input->post('email');
            $password   =   $this->input->post('password');

            // User Model Loaded in constructor
            if ($this->user->canLogin($email, $password)) {
                $session_data   =   array('email' => $email );
                $this->session->set_userdata($session_data);
                redirect('profile/personal','Refresh');

            } else {
                $this->session->set_flashdata('error', 'Invalid Username or Password');
                //redirect('login','Refresh');

            }
        } else {
            // try again to login
            //redirect('login','Refresh');
        }
    }

Моя пользовательская модель:

public function canLogin($email, $password) {
    $this->db->where('email',$email);
    $this->db->where('password',$password);
    $query  =   $this->db->get($this->tableName);

    if ($query->num_rows() > 0) {
        return true;
    } else {
        return false;
    }
}

Я знаю, что в какой-то момент мне нужно password_verify($string,$hash), но я не могу понять.

Как проверить пароль по электронной почте и перенаправить на нужное представление, т.е. personal/profile, и я делаю запрос с помощью вызова AJAX.

1 Ответ

0 голосов
/ 09 января 2019

Что вам нужно сделать, это извлечь запись из БД, где совпадает только электронная почта (при условии, что это уникальный ключ). Затем вы сравниваете возвращенное значение, используя password_verify().
Это очень грубое и непроверенное, но должно дать вам представление:

public function canLogin($email, $password) {
    $this->db->where('email',$email);
    // $this->db->where('password',$password);
    $query  =   $this->db->get($this->tableName);

    $row = $query->row();
    return $row ? password_verify($password, $row->password) : false;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...