我正在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的类都将在继续之前自动检查身份验证。我没有尝试运行此代码,只是以您的起点为例,将您的身份验证集成到的构造函数中,以最大限度地减少所有控制器索引函数中的代码重复。