github project url:https://github.com/luzhaochun/Codeigniter-login-auth-admin/tree/master/ci(最新)
工作之闲暇时间,研究下codeigniter,加了一个多模块admin后台,做了一个简单的后台
总的感觉的ci框架在快速扩展方面和数据库操作不是很智能,可能需要进一步了解。
简单的进行搭建了一个后台,使用bootstrap css模板,常用的一些的js插件:jquery ui,layer等等
一个简单的后台登陆,管理员操作,auth权限验证(未完成所有,由于逻辑不是很复杂,如有参考者,自行完成),主要熟悉ci工作原理,快速搭建一个网站项目。
1,登陆基本代码:
if (!defined('BASEPATH'))
exit('No direct script access allowed');
class Login extends CI_Controller{
var $data = [];
public function __construct() {
parent::__construct();
$this->load->library('form_validation');
$this->load->model('user');
$this->load->helper('url');
$this->load->helper('cookie');
}
public function index(){
if($this->user->is_logged_in()){
redirect('index');
}
$this->load->view('login');
}
public function checkLogin(){
if($this->user->is_logged_in()){
redirect('index');
}
$this->form_validation->set_rules('username', 'Username', 'required');
$this->form_validation->set_rules('password', 'Password', 'required');
if($this->form_validation->run()){
$username = $this->input->post('username');
$password = $this->input->post('password');
if($row = $this->user->get_by_username($username)){
if($this->user->check_password($password,$row['password'])){
$this->user->allow_pass($row);
if(!empty($this->input->post('remember'))){
// $this->input->set_cookie("username",$row['username'],3600*24*7);
// $this->input->set_cookie("password",$row['password'],3600*24*7);
// $this->input->set_cookie("user_id",$row['id'],3600*24*7);
set_cookie("user_id",$this->session->userdata('logged_in'),3600*24*7);
set_cookie("username",$this->session->userdata('user'),3600*24*7);
// set_cookie("password",$row['password'],3600*24*7);
// set_cookie("user_id",$row['id'],3600*24*7);
}
redirect('index');
}else{
$this->data['error'] = 'Invalid username or password';
}
}else{
$this->data['error'] = 'Username not found';
}
}
$this->load->view('login', $this->data);
}
public function logout(){
$this->user->remove_pass();
$this->load->view('login');
}
}
2,登陆设计到user表 所用的model:user.php中部分代码:
<?php
if (!defined('BASEPATH'))
exit('No direct script access allowed');
class user extends CI_Model{
protected $table = 'user';
protected $max_idle_time = 300; // allowed idle time in secs, 300 secs = 5 minute
public function __construct() {
parent::__construct();
}
function get_by_username($username){
//$this->db->last_query(); get last query way
if(!empty($username)){
$this->db->where('username',$username);
$this->db->or_where('email',$username);
$this->db->or_where('mobile',$username);
$query = $this->db->get($this->table,1);
if($query->num_rows()>0){
return $query->row_array();
}else{
return false;
}
}
return false;
}
function check_password($password,$hash_password){
list($salt,$hash) = explode('.', $hash_password);
$hash2 = $salt .'.'.md5($salt.$password);
return ($hash_password == $hash2);
}
function allow_pass($user_data){
$this->session->set_userdata(array('logged_in' => 'yes', 'user' => $user_data));
}
// Generate hashed password
function hash_password($password) {
$salt = $this->generate_salt();
return $salt . '.' . md5($salt . $password);
}
// create salt for password hashing
private function generate_salt($length = 10) {
$characterList = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
$i = 0;
$salt = "";
while ($i < $length) {
$salt .= $characterList{mt_rand(0, (strlen($characterList) - 1))};
$i++;
}
return $salt;
}
function is_logged_in(){
$logged_in = $this->session->userdata('logged_in');
$user = $this->session->userdata('user');
if($logged_in == 'yes'){
$this->allow_pass($user);
return true;
}else{
$this->remove_pass();
return false;
}
}
function remove_pass() {
$this->session->unset_userdata('user');
$this->session->unset_userdata('logged_in','');
}
public function userList(){
$this->db->where('status',1);
$query = $this->db->get($this->table);
return $query->result_array();
}
public function get_admin_info_by_id($id){
$this->db->where('id', $id);
$query = $this->db->get($this->table);
return $query->row_array();
}
}
3,在登陆过程中,我们可能涉及到类库扩展,主要是library和helper,当然有的朋友喜欢自定义logic,extend...个人习惯吧,对于helper,library文件中扩展的类库,尽量与系统类库的对应的文件名一致,就不需要再config中autoload.php再去配置,具体看项目要求吧(对于ci配置文件,自己去研究下,大部分框架大同小异,下面是扩展的url 助手类:MY_url_helper.php(MY__前缀在配置文件中自己修改,
<?php
/**
* CodeIgniter URL Helpers
*
* @package CodeIgniter
* @subpackage Helpers
* @category Helpers
* @author EllisLab Dev Team
* @link http://codeigniter.com/user_guide/helpers/url_helper.html
*/
// ------------------------------------------------------------------------
// ------------------------------------------------------------------------
if (!function_exists('base_url')) {
/**
* Base URL
*
* Create a local URL based on your basepath.
* Segments can be passed in as a string or an array, same as site_url
* or a URL to a file can be passed in, e.g. to an image file.
*
* @param string $uri
* @param string $protocol
* @return string
*/
function base_url($uri = '', $protocol = NULL) {
return get_instance()->config->base_url($uri, $protocol);
}
}
if (!function_exists('css_url')) {
function css_url($uri = '') {
$CI = & get_instance();
$css_string = "<link rel='stylesheet' type='text/css' href='" . $CI->config->base_url("/../public/admin/css" . $uri) . "' media='all'>";
return $css_string;
}
}
if (!function_exists('javascript_url')) {
function javascript_url($uri = '') {
$CI = & get_instance();
$javascript_string = "<script type='text/javascript' src='" . base_url("/../public/admin/javascript" . $uri) . "'></script>";
return $javascript_string;
}
}
if (!function_exists('bootstrap_url')) {
function bootstrap_url($uri = '',$type = 'css') {
$CI = & get_instance();
if($type == 'css'){
$return_string = "<link rel='stylesheet' type='text/css' href='" . $CI->config->base_url("/../public/admin/bootstrap" . $uri) . "' media='all'>";
}elseif($type == 'javascript'){
$return_string = "<script type='text/javascript' src='" . base_url("/../public/admin/bootstrap" . $uri) . "'></script>";
}else{
$return_string = "<link rel='stylesheet' type='text/css' href='" . $CI->config->base_url("/../public/admin/bootstrap" . $uri) . "' media='all'>";
}
return $return_string;
}
}
4:对于后台中layout我们如何去实现,这个应该不用解释了,网上应该可以搜出一大堆这方面介绍。
在library中定义Layout.php:
<?php
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
if (!defined('BASEPATH'))
exit('No direct script access allowed');
class Layout {
public $layout;
function __construct($params = array('main')) {
//本来是想在controller中加载这个类的时候顺便给构造函数传参设置要加载的布局文件,
//结果看文档好像$this -> load -> library('**','**')的第二个参数必须得是数组才能给构造函数传参,
//也许可以传字符串吧,有时间我再试试
$this->layout = 'layouts' . DIRECTORY_SEPARATOR . $params[0];
}
function view($view, $data = null, $flag = false) {
$ci = &get_instance();
$data['content'] = $ci->load->view($view, $data, true);
//这里的第三个参数true代表不输出,如果是false就会输出,默认是false,
//和thinkphp里的display和assign类似,这里用第三个参数来控制
if ($flag) {
$view = $ci->load->view($this->layout, $data, true);
return $view;
} else {
$ci->load->view($this->layout, $data, false);
}
}
}
?>
5,在登陆成功进入后台后,在公共类MY_Controller,该类的构造方法中,进行权限检查,layout加载,根据不同角色生成不同菜单等等,然后再定义不同的controller去继承该公共类。
<?php
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
if (!defined('BASEPATH'))
exit('No direct script access allowed');
class MY_Controller extends CI_Controller {
protected $_data = [];
function __construct() {
parent::__construct();
$this->load->model('user');
$this->load->helper('url');
$this->load->library('Layout', array('main'));
if (!$this->user->is_logged_in()) {
redirect('Login');
}
}
function pagenation(){
}
}
6,具体实现可以参考上传代码以及数据库文件
相关推荐
DX_AUTH是专为CodeIgniter框架设计的一个强大的权限控制库,它提供了细粒度的访问控制功能,使得开发者能够轻松管理用户角色、权限以及访问规则。CodeIgniter是一款流行的PHP框架,以其轻量级、高效性和易用性而受到...
在这个"一个简单的Codeigniter用户登录验证例子程序"中,我们将探讨如何在Codeigniter中实现用户认证和登录功能,这对于任何Web应用来说都是核心部分。这个程序包含了一些关键组件,如密码加密、session管理以及用户...
这个名为"codeigniter_auth"的项目是一个种子项目,特别关注身份验证和引导程序功能。它为开发者提供了一个起点,可以快速搭建具备用户登录、注册等基本认证功能的网站。 首先,让我们深入了解一下身份验证...
ci_auth这个文件名可能是项目中用于权限认证的相关文件,可能包含了控制器、模型、视图和其他相关组件。具体实现细节将依赖于代码内容,但以上概述了在CodeIgniter中构建权限系统的基本概念和流程。
"dx_auth权限认证插件"是一个专为用户提供安全权限管理的解决方案,广泛应用于各种软件系统,特别是与CI(CodeIgniter)框架集成时表现出色。这个插件的主要目标是确保只有授权用户才能访问特定的资源或执行特定的...
个人娱乐,使用CI框架进行开发一个含有登陆,auth权限验证,后台管理员管理登陆的简单项目 1:数据库结构如下(使用mysql) /* Navicat Premium Data Transfer Source Server : mysql_localhot Source Server Type ...
在 Mosaico-CodeIgniter-Ion-Auth 中,可能有多个视图文件用于显示登录表单、用户信息、权限管理等页面。 4. **Config**:配置文件定义了 Ion Auth 的行为,例如默认的用户表名、密码哈希算法等。`config/ion_auth....
Tank Auth是一个针对Codeigniter开发的权限管理类库,它提供了一套完整的用户认证解决方案,包括用户注册、登录、密码找回、邮箱验证等功能。Tank Auth的配置和使用相对简单,且作者在不断地更新和完善,目前版本为...
9. 用户认证与授权:虽然CodeIgniter本身不包含完整的用户认证系统,但可以通过第三方库如Tank Auth或Ion Auth实现用户注册、登录和权限控制。 10. 配置管理:CodeIgniter允许开发者通过配置文件定制应用的行为,...
Aauth是CodeIgniter 2.x和3.x的用户授权库,旨在简化一些基本的工作,例如登录,权限和访问操作。 尽管易于使用,但它还具有非常先进的功能,例如私人消息,分组,访问管理和公共访问。 这是“快速入门”页面。 您也...
CI_AuthLTE 是用于 codeigniter 2.x 的轻量级身份验证库。依赖关系或更高版本或更高版本主要特点1- 用于密码加密的 PHPass 2- 有限的登录尝试3- 在有限的时间内确保“记住我” 4-忘记密码帮助5- 可选的激活电子邮件...
10. **用户认证**:为了管理用户登录和权限,可以利用CodeIgniter的用户认证库或第三方扩展,例如Tank Auth。 在这个“精美图片网”项目中,初学者可以通过以下步骤进行学习: 1. **安装与配置**:下载并解压...
- **中间件/钩子**:可以使用CI的钩子或者自定义中间件来统一处理权限验证。 4. **代码结构解析** 压缩包中的`rbac-codeigniter-master`可能包含以下关键文件和目录: - `application/models`: 包含用户、角色和...
身份验证基于 Tank Auth。服务器要求建议使用 PHP 5.4 或更高版本。 它也应该适用于 5.2.4,mysql,CodeIgniter 3 但我们强烈建议您不要跑步如此旧版本的 PHP,因为潜在的安全和性能问题,以及缺失的功能。安装通过...
关于 & 动机Gold Auth 是 CodeIgniter 框架的一个简单、轻量级的身份验证库,基于 Redux 身份验证。 制作它的原因有两个:一,我需要一个可以适应多个不同项目的基本身份验证库,二,我想要一些练习来尝试理解 CI 中...
CodeIgniter可以通过自定义库或第三方库如Tank Auth实现登录、注册以及角色权限管理。 5. **表单验证**:在添加或编辑项目信息时,CodeIgniter的表单验证类可以帮助开发者验证用户输入,确保数据的完整性和一致性。...
11. **用户认证与授权**:开发者可以构建自己的用户认证系统,或利用第三方库如Tank Auth,实现用户注册、登录、权限管理等功能。 12. **国际化与本地化**:CodeIgniter支持多语言,方便开发者构建面向全球用户的...
认证CodeIgniter 3.0+授权,导航,模板和数据表库CIAUTH是CodeIgniter 3.0+和PHP 5.5的身份验证,导航,模板和数据表库。 它使用最新PHP安全功能完全从头开始构建,并结合了所有新的CodeIgniter功能,包括使用...
此外,还有如 Ion Auth 这样的身份验证库,方便开发者实现用户认证和权限管理。 总的来说,CodeIgniter v3.1.5 是一个兼顾性能和易用性的PHP框架,适合初学者和经验丰富的开发者。通过它的各种工具和特性,开发者...
2. **身份验证和授权**:应用中的用户登录系统可能基于Codeigniter的Session库或第三方库如Tank Auth,实现用户登录、身份验证和会话管理。预设的多用户账号表明了不同用户可能有不同的访问权限。 3. **数据库设计*...