Войти MD5 в codeigniter

1

Это мой контроллер и модели, я не могу проверить пароль.

Контроллер:

function login() {
    $data = array();
    if ($this->input->post('username') != '') {
        $data = $this->loginm->login($this->input->post('username'), md5($this->input->post('password')));
        if ($data['success'] == TRUE) {
            $type = $this->session->userdata('type');
            if($type==1){ // Admin
                // redirect(get_slug('test',false));
                $this->load->view("test");

            }
        }

        $data['username'] = $this->input->post('username');
        $data['password'] = $this->input->post('password');
    }

Модели:

function login($name, $pass) {
    // $data['success'] = FALSE;
    $user = $this->db->where('username', $name)->where('deleted', 0)->get($this->prefix . 'user');
    if ($user->num_rows() > 0) {
        $user = $user->row();
        if ($this->bcrypt->verify($pass, $user->password)) { 
            $data['success'] = TRUE;
            $this->session->set_userdata(array('user' => $user->user_id));
            $this->session->set_userdata(array('type' => $user->user_type));
        } else {
            $data['success'] = FALSE;
            $data['message'] = 'Username or password wrong !!';
        }
    } else {
        $data['success'] = FALSE;
        $data['message'] = 'Username or password wrong !!';
    }
    return $data;
}

Когда я вхожу в правильное имя пользователя и пароль, но покажу заметку "Имя пользователя или пароль неверно" !!

  • 3
    Я бы не стал использовать MD5, поскольку он не безопасен для входа в систему. Используйте этот php.net/manual/en/function.password-hash.php для хеширования и для verfiy php.net/manual/en/function.password-verify.php
  • 0
    Вы можете помочь мне отредактировать мой код? ты не можешь?
Теги:
codeigniter
login

2 ответа

2
Лучший ответ

Я больше не буду использовать MD5 для входа в систему, если он не безопасен.

Этот код ниже может вам помочь.

Я бы воспользовался хэшем пароля здесь http://php.net/manual/en/function.password-hash.php

При создании пароля пользователя убедитесь, что столбец пароля - var char 255.

Модель для пароля хеширования

public function add_user() {
    $this->load->library('encryption');

    $key = bin2hex($this->encryption->create_key(16));

    $options = [
        'cost' => 12,
        'salt' => $key,
    ];

    $secure_code = password_hash($this->input->post('password'), PASSWORD_BCRYPT, $options);

    $data = array(
        'username' => $this->input->post('username'),
        'password' => $secure_code,
        // Any Other Data you need.
    );

    $this->db->set($data);
    $this->db->insert($this->db->dbprefix . 'user');
}

Теперь нам нужно создать модель входа в систему или библиотеку для проверки информации о пользователе. В этом случае у меня есть библиотека:

<?php

class User {

public function __construct() {
    $this->CI =& get_instance();

    if ($this->CI->session->userdata('is_logged')) {

        $this->CI->db->select('*');
        $this->CI->db->from($this->CI->db->dbprefix . 'user');
        $this->CI->db->where('user_id', $this->CI->session->userdata('user_id'));
        $user_info_query = $this->CI->db->get();

        if ($user_info_query->num_rows() > 0) {
            $this->user_id = $user_info_query->row('user_id');
            $this->username = $user_info_query->row('username');
            $this->firstname = $user_info_query->row('firstname');
            $this->lastname = $user_info_query->row('lastname');

        }
    }
}

public function login($username) {
    if ($this->validate_password() == TRUE) {

        $this->CI->db->where('username', $username);
        $user_info_query = $this->CI->db->get($this->CI->db->dbprefix . 'user');

        if ($user_info_query->num_rows() > 0) {

            $this->user_id = $user_info_query->row('user_id');
            $this->username = $user_info_query->row('username');
            $this->firstname = $user_info_query->row('firstname');
            $this->lastname = $user_info_query->row('lastname');

            return TRUE;

        } else {

            return FALSE;

        }

    }
}

// http://php.net/manual/en/function.password-verify.php

public function validate_password() {
    if (password_verify($this->CI->input->post('password'), $this->get_password())) {
        return TRUE;
    } else {
        return FALSE;
    }
}

public function get_password() {
    $this->CI->db->where('username', $this->CI->input->post('username'));
    $query = $this->CI->db->get($this->CI->db->dbprefix . 'user');

    if ($query->num_rows() > 0) {
        $row = $query->row();
        return $row->password;
    } else {
        return FALSE;
    }
}

public function get_user_id() {
    return $this->user_id;
}

public function get_username() {
    return $this->username;
}

public function get_firstname() {
    return $this->firstname;
}

public function get_lastname() {
    return $this->lastname;
}
}

На контроллере входа и просмотре

Использование библиотеки проверки соответствия Codeigniter http://www.codeigniter.com/user_guide/libraries/form_validation.html и помощника формы http://www.codeigniter.com/user_guide/helpers/form_helper.html

Возможно, вам придется настраивать настраиваемые маршруты в application/config/routes.php

контроллер:

Имя файла Login.php

<?php

class Login extends CI_Controller {

    public function __construct() {
        parent::__construct();
        $this->load->library('user');
        $this->load->library('form_validation');
        $this->load->helper('form');
        $this->load->helper('url');
    }

    public function index() {   
        $this->data['title'] = 'Some Title';

        $this->form_validation->set_rules('username', 'Username', 'trim|required|callback_verfiy_login[username]');
        $this->form_validation->set_rules('password', 'password', 'trim|required');

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

            $this->load->view('login_page', $this->data);

        } else {

            $this->data = array(
                'is_logged' => TRUE,
                'user_id' => $this->user->get_user_id()
            );

            $this->session->set_userdata($this->data);

            redirect('success_controller');
        }
    }

    public function verfiy_login($str) {
        if ($this->user->login($str) == TRUE) {
            return TRUE;
        } else {
            $this->form_validation->set_message('verfiy_login', 'Cannot login please try again!');
            return FALSE;
        }
    }
}

Посмотреть

<?php echo form_open_multipart('login');?>

<?php $username_data = array(
'id' => 'form-username',
'name' => 'username',
'class' => 'form-control', 
'value' => set_value('username'), 
'size' => '50',
'placeholder' => 'Username'
);?>
<?php echo form_input($username_data);?>
<?php echo form_error('username', '<br/><div class="text-center text-danger">', '</div>'); ?>


<?php $password_data = array(
'id' => 'form-password', 
'class' => 'form-control', 
'name' => 'password',
'value' => set_value('password'),
'size' => '50', 
'placeholder' => 'Password'
);?>
<?php echo form_password($password_data);?> 
<?php echo form_error('password', '<br/><div class="text-center text-danger">', '</div>'); ?>


<?php $submit_data = array(
'id' => 'form-submit',
'type' => 'submit',
'name' => 'sumbmit',
'class' => 'btn btn-primary',
'value' => 'Login'
);?>
<?php echo form_submit($submit_data);?>


<?php echo form_close();?>

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

0

Codeigniter имеет собственный класс шифрования, который использует хэш-алгоритм в сочетании с ключом, который вы можете создать самостоятельно. Вы должны сохранить пароль, уже зашифрованный в базе данных. Затем, когда вы хотите, вы извлекаете и расшифровываете.

Например. Создание пользователя или изменение пароля:

$password_to_db = $this->encrypt->encode($this->input->post('password');

Получение пароля:

$user = $this->user_model->get_user($user_id);

if($password_from_login_form == $this->encrypt->decode($user->password)){
    /* ... login function ... */
}

Ознакомьтесь с руководством по классу шифрования, чтобы узнать, как его загрузить и настроить.

  • 3
    Пароли должны быть хешированы , а не зашифрованы. И вы также ссылаетесь на устаревшую библиотеку в старом руководстве для версии, которая больше не поддерживается .
  • 0
    Официальное руководство CodeIgniter находится здесь: codeigniter.com/user_guide
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню