Paso 1
vamos a la base de datos cart y pegamos en la pestaña SQL el siguiente código y lo ejecutamos:CREATE TABLE IF NOT EXISTS `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(50) CHARACTER SET utf8 COLLATE utf8_spanish_ci NOT NULL,
`password` varchar(50) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci AUTO_INCREMENT=12 ;
INSERT INTO `users` (`id`, `username`, `password`) VALUES
(11, 'admin', '21232f297a57a5a743894a0e4a801fc3');
Paso 2
Vamos a cart/application/models/ y creamos un modelo llamado login_model.phpCódigo de login_model.php
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Login_Model extends CI_Model{
function valid_user($username, $password)
{
$this->db->where('username', $username);
$this->db->where('password', $password);
$query = $this->db->get('users');
if($query->num_rows() >0){
return TRUE;
}else{
return FALSE;
}
}
function valid_user_ajax($username){
$this->db->where('username', $username);
$query = $this->db->get('users');
if($query->num_rows() >0){
echo $query->num_rows();
}
}
}
Paso 3
En cart/application/controllers/ creamos un controlador llamado login.phpCódigo del controlador login.php
<?php
class Login extends CI_Controller{
function __construct()
{
parent::__construct();
$this ->load->model('Login_Model');
$this->load->library(array('session','form_validation'));
}
function index()
{ // reglas de validación
$this->form_validation->set_rules('username', 'Usuario', 'callback__valid_login');
$this->form_validation->set_rules('password', 'Contraseña','|md5|required');
$this->form_validation->set_message('required', 'el campo %s es requerido');
$this->form_validation->set_message('_valid_login', 'El usuario o contraseña son incorrectos');
$this -> form_validation -> set_error_delimiters('<ul><li>', '</li></ul>');
if ($this->form_validation->run() == FALSE)
{
$data['title'] = 'Tienda Virtual - Sistema de Login CI';
$this->load->view('admin/login',$data);
}
else{
$username = $this->input->post('username');
$data_user = $array = array('user'=> $username, 'logued_in' => TRUE);
// asignamos dos datos a la sesión --> (username y logued_in)
$this->session->set_userdata($data_user);
$data['title'] = 'Administrador';
$data['user'] = $username; // = $this->session->userdata('user');
$this->load->view('admin/header_admin',$data);
$this->load->view('admin/admin');
$this->load->view('front/footer');
}
}
function _valid_login($username,$password)
{
$username = $this->input->post('username');
$password = md5($this->input->post('password'));
return $this->Login_Model->valid_user($username,$password);
}
function valid_login_ajax(){
//verificamos si la petición es via ajax
if($this->input->is_ajax_request()){
if($this->input->post('username')!==''){
$username = $this->input->post('username');
$this->Login_Model->valid_user_ajax($username);
}
}else{
redirect('login');
}
} // fin del método valid_login_ajax
function logout(){
$this->session->sess_destroy();
redirect('login');
}
}
Paso 4
Creación de la vistas.
Vamos a cart/application/views/ y creamos un directorio llamado admin, dentro de este directorio creamos 3 vistas una será el login: login.php, la otra será el header: header_admin.php para la parte administrativa en el cual validamos si existe la sesión del usuario y así permitirle acceder, de esta manera siempre que necesitemos crear funciones para el administrador vamos a cargar en el controlador el header de la administración, para no tener que hacer más de una validación, y la tercera vista es donde se la da la bienvenida al administrador, esta vista la llamamos admin.php. En login.php vamos a incluir las validaciones con Jquery y Ajax.Código de login.php
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">Como dije antes en el header_admin.php es donde haremos la validación si el usuario está logueado, la cual es necesario hacer solo una vez.
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8"/>
<title><?=$title?></title>
<meta name="keywords" content=""/>
<meta name="description" content=""/>
<link rel="stylesheet" type="text/css" href="<?=base_url();?>assets/template/style.css"/>
<script type="text/javascript" src="<?=base_url();?>assets/js/jquery-1.9.1.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$('#username').focus();
$('#username').blur(function(){
var user = $(this).val();
if(user==''){
$('#msg_username').html('El Usuario es requerido').css('color','red');
}else{
var info = { username: user };
$.ajax({
url: '<?=base_url();?>login/valid_login_ajax',
type: 'POST',
data: info,
success: function(msg){ // alert(msg);
if(msg!=1){
$('#msg_username').html('El Usuario es Incorrecto').css('color','red');
}else {
$('#msg_username').html('El Usuario es correcto').css('color','green');
}
}
});
}
});
});
$(document).ready(function(){
$('#password').blur(function(){
var user = $(this).val();
if(user==''){
$('#msg_password').html('La Contraseña es requerida').css('color','red');
}else{
$('#msg_password').empty();
}
});
});
</script>
</head>
<body>
<div id="container">
<div id="header">
<h1><?=$title?></h1>
</div><!-- End Header -->
<div id="content">
<?php $attributes = array('id' => 'form_login');
$username = array('name'=>'username', 'id'=>'username','class'=>'input','placeholder'=>'Usuario',
'value'=>set_value('username'), 'size'=> '35',);
$password = array('name'=>'password', 'id'=>'password','class'=>'input','placeholder'=>'Contraseña',
'type'=>'password', 'size'=> '35',);
if(validation_errors()):
?>
<div id="error"><?=validation_errors();?></div>
<?php endif ?>
<?=form_open('login', $attributes);?>
<div class="padding"><?=form_label('Usuario');?></div>
<div id='msg_username' class="padding"></div>
<div class="padding"><?=form_input($username);?></div>
<div class="padding"><?=form_label('Contraseña')?></div>
<div id='msg_password' class="padding"></div>
<div class="padding"><?=form_input($password)?></div>
<?=form_submit(array('name' => 'submit','class'=>'submit',
'value' => 'Acceder'))?>
<?=form_close();?>
</div><!-- End Content -->
<div id="footer">
<p>Copyright © 2013 Tienda virtual con CodeIgniter</p>
</div><!-- End Footer -->
</div><!-- End Container -->
</body>
</html>
Código de header_admin.php
<?php
$logued = $this->session->userdata('logued_in');
$session = $this->session->userdata('session_id');
if($logued === FALSE || $session === FALSE ){ /* por seguridad hacemos doble verificación; aunque estas
* 2 variables siempre van a tener el mismo estado */
redirect('login'); exit();
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8"/>
<title><?=$title?></title>
<meta name="keywords" content=""/>
<meta name="description" content=""/>
<link rel="stylesheet" type="text/css" href="<?=base_url();?>assets/template/style.css"/>
<script type="text/javascript" src="<?=base_url();?>assets/js/jquery-1.9.1.js"></script>
</head>
<body>
<div id="container">
<div id="header">
<h1>Tienda Virtual con CodeIgniter</h1>
</div><!-- End Header -->
<div id="menu">
<ul>
<li><a href="#">Administrar Productos</a></li>
<li><a href="#">Administrar Usuarios</a></li>
<li class="cart_menu"><?=anchor('login/logout', 'Cerrar Sesión');?></li>
</ul>
</div><!-- End Menu -->
<div id="content">
Código de la vista admin.php
<?php echo heading('Bienvenido: '.$user, 4);Último paso añadir los estilos para el formulario de login en cart/assets/template/style.css
/* FORMULARIO DE LOGIN */
#form_login{
margin-left: auto; margin-right: auto; margin-top:60px; padding-top: 25px;
}
#form_login .padding{
padding:0px 0px 4px 40px;
}
#form_login label{
color: #484848; font-size:14px;
}
#form_login .input{
-moz-border-radius: 7px; -khtml-border-radius: 7px; -webkit-border-radius: 7px; border-radius: 7px;
background-color: #f9f9f9;border: 1px solid #cacaca;
font-size: 15px;padding: 8px 10px;width: 300px;
}
#form_login .submit{
-moz-border-radius: 15px;-khtml-border-radius: 15px; -webkit-border-radius: 15px; border-radius: 15px;
-webkit-box-shadow: 2px 3px 4px 3px #ccc;box-shadow: 2px 3px 4px 3px #ccc;
font-family: arial,verdana,sans-serif; background-color: #f9f9f9;border: 1px solid #cacaca; font-size:14px;
font-weight: bold; padding: 8px 10px; cursor: pointer;
margin-left:135px; width: 90px;
}
El usuario y la contraseña es admin
De esta forma ya podemos probar: http://localhost/cart/login
Descargar archivos
genial me sirvio ! :D
ResponderBorrarDe eso se trata; que se útil. Me alegro!
ResponderBorrarUN DETALLE TENGO 2 TIPO DE USUARIOS ADMINISTRADOR Y OPERADOR COMO HARIA EN ESE CASO POR LA CUESTION DE LOS PRIVILEGIOS ???
ResponderBorrarHay muchas forma de hacerlo, una muy simple sería agregar un campo a la tabla usuario donde tenga 2 roles; los puede crear numéricos o string por ejemplo administrador es el numero 1; el operador el 2; luego le asigna ese valor a la session y dependiendo si es el numero 1 o el 2, le da el permiso de acceder a distintas partes. Una opción mucho mejor sería utilizar una librería de autenticación (auth), hay muchos ejemplos en la red.
ResponderBorrar