Это хороший процесс входа в CodeIgniter? - PullRequest
1 голос
/ 13 марта 2012

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

Мой класс User_model

    <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

    class User_model extends CI_Model {
        public function __construct() {
            parent::__construct();
        }

        function login($email, $password) {
            if($this->simpleloginsecure->login($email, $password)) {
                return true;
            }
            return false;
        }
    } 

    ?>

Класс My User Controller

if(!defined('BASEPATH')) exit('No Direct script access allowed');

Class User extends CI_Controller {

    public function __construct() {
        parent::__construct();
        $this->load->model('user_model');
    }

    public function index() {
        if($this->session->userdata('logged_in')) {
            redirect('/user/dashboard/', 'location');
        } else {
            $data['message'] = '<p class="error">You need to be logged in to view the administration area</p>';
            $this->load->view('user/login', $data);
        }
    }

    public function dashboard() {
        if($this->session->userdata('logged_in')) {
            $data['title'] = 'Welcome';
            $this->load->view('user/dashboard', $data);
        } else {
            $data['message'] = '<p class="error">You need to be logged in to view the administration area</p>';
            redirect('/user/login/', 'location');
        }

    }

    public function login() {

        if($this->session->userdata('logged_in')) {
            redirect('/user/dashboard/', 'location');
        }

        $this->form_validation->set_rules('email', 'E-mail', 'trim|required|valid_email');
        $this->form_validation->set_rules('password', 'Wachtwoord', 'trim|required|min_length[4]|max_length[32]');

        if($this->form_validation->run() == FALSE) {
            $this->index();
        } else {
            if($this->user_model->login($this->input->post('email'), $this->input->post('password'))) {
                redirect('/user/dashboard/', 'location');
            } else {
                $this->index();
            }
        }
    }

    public function logout() {
        $this->simpleloginsecure->logout();
        redirect('/user/login/', 'location');
    }



}

1 Ответ

1 голос
/ 13 марта 2012

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

Небезопасный контроллер может быть загружен без проверки подлинности, когда безопасный контроллер проверяет правильность входа в конструктор. Таким образом, у вас может быть это для базового класса Secure_Controller:

Class Secure_Controller extends CI_Controller {

public function __construct() {
    parent::__construct();
    if(!$this->session->userdata('logged_in')) {
        $data['message'] = '<p class="error">You need to be logged in to view the administration area</p>';
        $this->load->view('user/login', $data);
    }
}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...