在CodeIgniter中,这是一个很好的登录过程吗


Is this good login process in CodeIgniter?

我正在CodeIgniter中创建我的第一个登录进程。我使用simpleloginsecure库进行实际的会话管理,但我自己编写了控制器和模型,我希望你能看到其中的任何缺陷。

我的用户模型类

    <?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;
        }
    } 
    ?>

我的用户控制器类

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');
    }

}

这是一个良好的开端,尽管如果您创建两种类型的基本控制器类,一种是不安全控制器,另一种是安全控制器,这可能有助于减少控制器索引函数中的代码重复。

在安全控制器检查构造函数中的有效登录的情况下,允许在不进行身份验证的情况下加载不安全控制器。因此,您可能会将其用于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的类都将在继续之前自动检查身份验证。我没有尝试运行此代码,只是以您的起点为例,将您的身份验证集成到的构造函数中,以最大限度地减少所有控制器索引函数中的代码重复。

相关文章: