Функция проверки пароля в codeigniter для входа - PullRequest
0 голосов
/ 15 мая 2018

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

$password_hash = password_hash($password, PASSWORD_BCRYPT);

Как я могу использовать функцию password_verify в коде моей модели?

Вот мой код модели:

public function login($data) {

    $condition = "username =" . "'" . $data['username'] . "' AND " . "password =" . "'" . $data['password'] . "'";
    $this->db->select('*');
    $this->db->from('users');
    $this->db->where($condition);
    $this->db->limit(1);
    $query = $this->db->get();

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

Вот мой контроллер:

public function login_user() 
{

    $this->form_validation->set_rules('username', 'Username', 'trim|required|xss_clean','required');
    $this->form_validation->set_rules('password', 'Password', 'trim|required|xss_clean','required');

    if ($this->form_validation->run() == FALSE) {

          $this->load->view('login_view');
    } else {
        $data = array(
            'username' => $this->input->post('username'),
            'password' => $this->input->post('password'),
            'firstname' => $this->input->post('firstname'),
            'lastname' => $this->input->post('lastname')
        );
        $result = $this->login_database->login($data);
        if ($result == TRUE) {
                    // Add user data in session
            $this->session->set_userdata('username', $data['username']);
            $this->session->set_userdata('firstname', $data['firstname']);
            $this->session->set_userdata('lastname', $data['lastname']);

            //redirect to dashboard
            $this->load->view('include/sidenavbar');
            $this->load->view('include/topnavbar');
            $this->load->view('dashboard');
        } else {


             $this->session->set_flashdata('message', 'Login is invalid. Please try again!');
            $this->load->view('login_view', $data);
        }
    }
}

Может ли кто-нибудь помочь мнекак это сделать .. Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 15 мая 2018

Надеюсь, это поможет вам:

после возврата данных из модели вы можете проверить правильный пароль, используя password_verify ()

$data = array(
        'username' => $this->input->post('username'),
        'password' => $this->input->post('password'),
        'firstname' => $this->input->post('firstname'),
        'lastname' => $this->input->post('lastname')
    );

$result = $this->login_database->login($data);
/*$result should return a single user data (in array form here)*/
if (! empty($result)) 
{
    if (password_verify($data['password'], $result['password'])) 
    {
       $this->session->set_userdata('username', $data['username']);
       $this->session->set_userdata('firstname', $data['firstname']);
       $this->session->set_userdata('lastname', $data['lastname']);

       //redirect to dashboard
       redirect('dashboard'); /*use redirect()*/
      //$this->load->view('include/sidenavbar');
      //$this->load->view('include/topnavbar');
      //$this->load->view('dashboard');
    } 
    else 
    {
        $this->session->set_flashdata('message', 'Password is invalid. Please try again!');
        $this->load->view('login_view', $data);
    }      

} 
else 
{
    $this->session->set_flashdata('message', 'Login is invalid. Please try again!');
    $this->load->view('login_view', $data);
}

Ваша модель должнабыть таким:

public function login($data) 
{
    $this->db->where('username', $data['username']);
    $query = $this->db->get('users');

    if ($query->num_rows() == 1) {
        $user = $query->row_array();
        return $user;
    } else {
        return false;
    }
}

Обновление : метод панели инструментов

public function dashboard()
{
    /*$data['title'] = 'my title';
    you can pass data to the view like this 
    $this->load->view('dashboard',$data);
    */
    $this->load->view('templates/header');
    $this->load->view('dashboard');
    $this->load->view('templates/footer');
}
0 голосов
/ 15 мая 2018

Вы должны использовать password_verify (), чтобы узнать, действителен ли ваш пароль.

Попробуйте эту модель функции:

public function login($data) {
    $this->db->select('password');
    $this->db->from('users');
    $this->db->where('username', $data['username']);
    $this->db->limit(1);
    $query = $this->db->get();

    if ($query->num_rows() == 1) {
        $record = $query->row_array();
        return password_verify($data['password'], $record['password']);
    } else {
        return false;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...