Documente Academic
Documente Profesional
Documente Cultură
usuarios en CodeIgniter
Por Ing. Diego Angelini
17 de marzo de 2011
15 Comentarios
PHP
Cmo hacer un sistema de login de usuarios, acceso por
usuario y contrasea, en una pgina web PHP desarrollada
con el framework CodeIgniter.
Este es un artculo prctico que nos puede ayudar a aprender algunas tcnicas
de desarrollo en el framework CodeIgniter, adems de darnos una gua til para
la creacin de un sistema que permita loguearse a los usuarios que visitan
nuestra aplicacin web.
El sistema de login es uno de los primeros problemas que querremos resolver
en aplicaciones web. No es ms que un mdulo que identifica a los usuarios
que visitan una pgina web, para implementar un nivel de seguridad por medio
de un nombre de usuario y una clave. Por supuesto, en las aplicaciones
CodeIgniter, uno de nuestros primeros pasos ser desarrollar ese acceso
autenticado. Por ello, nos pondremos manos a la obra para explicar paso por
paso una posible implementacin de un script para facilitar la autenticacin de
usuarios en nuestra pgina web.
Nota: El sistema de login ha sido tratado anteriormente en DesarrolloWeb.com. Claro que, cuando
estamos desarrollando en CodeIgniter, los modos en los que tenemos que enfrentar los problemas
varan un poco con respecto a la programacin tradicional en PHP (sin usar ningn framework). As
pues, os pasamos un par de referencias tiles para poder complementar la presente informacin.
Manual de CodeIgniter
function login($idioma=null)
{
// $this->config->set_item('language',
'spanish'); // Setear dinmicamente el idioma que deseamos que
ejecute nuestra aplicacin
if(!isset($_POST['maillogin'])){ // Si no recibimos ningn
valor proveniente del formulario, significa que el usuario recin
ingresa.
$this->load->view('login'); // Por lo tanto le
presentamos la pantalla del formulario de ingreso.
}
else{ // Si el usuario ya pas por la
pantalla inicial y presion el botn "Ingresar"
$this->form_validation->set_rules('maillogin','e-
mail','required|valid_email'); // Configuramos las validaciones
ayudandonos con la librera form_validation del Framework Codeigniter
$this->form_validation-
>set_rules('passwordlogin','password','required');
if(($this->form_validation->run()==FALSE)){ // V
erificamos si el usuario super la validacin
$this->load->view('login'); // En
caso que no, volvemos a presentar la pantalla de login
}
else{ // Si ambos
campos fueron correctamente rellanados por el usuario,
$this->load->model('usuarios_model');
$ExisteUsuarioyPassoword=$this->usuarios_model-
>ValidarUsuario($_POST['maillogin'],$_POST['passwordlogin']); // c
omprobamos que el usuario exista en la base de datos y la password
ingresada sea correcta
if($ExisteUsuarioyPassoword){ // La variable
$ExisteUsuarioyPassoword recibe valor TRUE si el usuario existe y
FALSE en caso que no. Este valor lo determina el modelo.
echo "Validacion Ok<br><br><a
href=''>Volver</a>"; // Si el usuario ingres datos de acceso
vlido, imprimos un mensaje de validacin exitosa en pantalla
}
else{ // Si no logr validar
$data['error']="E-mail o password incorrecta, por favor
vuelva a intentar";
$this->load->view('login',$data); // Lo regresamos
a la pantalla de login y pasamos como parmetro el mensaje de error a
presentar en pantalla
}
}
}
}
}
?>
Paso 2: Cdigo para la vista login.php:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Demo del script: Cmo hacer un login de usuarios en php?
</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-
1">
<meta name="description" content="Efecta tus propias pruebas on-line.
Para ejecutarlo en tu sitio necesitas del framework CodeIgniter,
provisto gratis por la empresa de hosting Solo10.com." />
<meta name="keywords" content="php, login, codeigniter, hosting, demo,
web hosting, script, usuarios" />
(function() {
var ga = document.createElement('script'); ga.type =
'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' :
'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(ga, s);
})();
</script>
<meta property="og:title" content="Cmo hacer un login de usuarios en
php y codeigniter? Ver script y demo !" />
<meta property="og:type" content="blog" />
<meta property="og:url"
content="http://www.blogdephp.com/script/php/login/" />
<meta property="og:image"
content="http://www.blogdephp.com/images/php.gif" />
<meta property="og:site_name" content="www.blogdephp.com" />
<meta property="fb:admins" content="100001608753773" />
</head>
<body style="margin-top:0px">
<?php echo form_open('php/login/'); ?>
<div class="Info">
<p class="Titulo"><h1>Demo del script: <a href="/php-
login/">Cmo hacer un login de usuarios en php y codeigniter?
</a></h1></p>
<p> </p>
</div>
<div id="LoginUsuarios">
<div class="fila">
<div class="LoginUsuariosCabecera">E-mail:</div>
<div class="LoginUsuariosDato"><input type="text"
name="maillogin" value="<?= set_value('maillogin'); ?>" size="25"
/></div>
<div class="LoginUsuariosError">
<?
if(isset($error)){
echo "<p>".$error."</p>";
}
echo form_error('maillogin');
?>
</div>
</div>
<div class="fila">
<div class="LoginUsuariosCabecera">Contrasea:</div>
<div class="LoginUsuariosDato"><input type="password"
name="passwordlogin" value="<?= set_value('passwordlogin'); ?>"
size="25" /></div>
<div class="LoginUsuariosError"><?=
form_error('passwordlogin');?></div>
</div>
<div class="fila">
<div class="LoginUsuariosCabecera"></div>
<div class="LoginUsuariosDato"></div>
</div>
<div class="fila">
<div class="LoginUsuariosCabecera"><input type="submit"
value="Ingresar"></div>
<div class="LoginUsuariosDato"></div>
</div>
</div>
</form>
<p> </p>
<div class="Info">
<p><u><h2>Datos de acceso (demo)</h2></u></p>
<p> </p>
<p>(correspondiente a un usuario ya ingresado en la base de
datos)</p>
<p><strong>e-mail</strong>: diego@blogdephp.com</p>
<p><strong>password</strong>: blogdephp</strong></p>
</div>
<p> </p>
<!--<p><iframe src="http://www.facebook.com/plugins/like.php?href=http
%3A%2F%2Fblogdephp.com%2Fscript%2Fphp
%2Flogin&layout=standard&show_faces=true&width=450&action=like&colorsc
heme=light&height=80" scrolling="no" frameborder="0"
style="border:none; overflow:hidden; width:450px; height:50px;"
allowTransparency="true"></iframe></p> -->
<div class="addtoany_share_save_container"><div class="a2a_kit
addtoany_list"><iframe class="addtoany_special_service facebook_like"
src="http://www.facebook.com/plugins/like.php?href=http%3A%2F
%2Fblogdephp.com%2Fphp-login
%2F&layout=button_count&show_faces=false&width=75&action=like&colorsch
eme=light&height=15" frameborder="0" scrolling="no"
style="border:none;overflow:hidden;width:90px;height:20px"></iframe><i
frame class="addtoany_special_service twitter_tweet"
src="http://platform.twitter.com/widgets/tweet_button.html?url=http%3A
%2F%2Fblogdephp.com%2Fphp-login%2F&counturl=http%3A%2F%2Fblogdephp.com
%2Fphp-login%2F&count=horizontal&text=%C2%BFC%C3%B3mo%20hacer%20un
%20login%20de%20usuarios%20en%20Php%20y%20Codeigniter%3F: "
frameborder="0" scrolling="no"
style="border:none;overflow:hidden;width:80px;height:20px"></iframe><a
class="a2a_button_linkedin"
href="http://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F
%2Fblogdephp.com%2Fphp-login%2F&linkname=%C2%BFC%C3%B3mo%20hacer%20un
%20login%20de%20usuarios%20en%20Php%20y%20Codeigniter%3F"
title="LinkedIn" rel="nofollow" target="_blank"><img
src="http://blogdephp.com/wp-content/plugins/add-to-
any/icons/linkedin.png" width="16" height="16" alt="LinkedIn"
border="0" style="margin-right:20px; "/></a><a class="a2a_dd
addtoany_share_save" href="http://www.addtoany.com/share_save"><img
src="http://blogdephp.com/wp-content/plugins/add-to-
any/share_save_171_16.png" width="171" height="16" alt="Share"
border="0"/></a></div>
<script type="text/javascript"><!--
var a2a_config = a2a_config || {};
a2a_localize = {
Share: "Compartir",
Save: "Guardar",
Subscribe: "Suscribirse",
Email: "E-mail",
Bookmark: "Marcador",
ShowAll: "Mostrar todo",
ShowLess: "Mostrar menos",
FindServices: "Buscar servicios(s)",
FindAnyServiceToAddTo: "Buscar servicio",
PoweredBy: "Servicio ofrecido por",
ShareViaEmail: "Compartir por e-mail",
SubscribeViaEmail: "Suscribirse por e-mail",
BookmarkInYourBrowser: "Agregar a marcadores de tu navegador",
BookmarkInstructions: "Presione Ctrl+D o Cmd+D para marcar esta
pagina",
AddToYourFavorites: "Agregar a favoritos",
SendFromWebOrProgram: "Enviar de cualquier direccin de e-mail o
programa de e-mail",
EmailProgram: "Programa de e-mail"
};
a2a_config.linkname="Cmo hacer un login de usuarios en Php y
Codeigniter?";
a2a_config.linkurl="http://blogdephp.com/php-login/";
//--></script><script type="text/javascript"
src="http://static.addtoany.com/menu/page.js"></script>
<div class="Info">
<p><u><h2>Requerimientos necesarios en tu web hosting para poder
ejecutar el script</h2></u></p>
<p> </p>
<p>Para poder implementar este script de login, se requiere el
framework de php "Codeigniter"</p>
<p>(esta maravillosa herramienta nos ayuda a ahorrar mucho tiempo y
esfuerzo en nuestros trabajos de programacin php).</p>
<p> </p>
<p>La empresa <a
href="http://www.solo10.com/productos/WebHostingLinux/?
safblogdephp">Solo10.com</a>, cuando contratas un paquete de hosting
anual desde u$s 49.95,</p>
<p>te ofrece la instalacin y configuracin inicial del Codeigniter
gratis :-)</p>
<p> </p>
<p>Este blog y demo se encuentran alojados en los servidores de
Solo10.com.</p>
<p>Te recomiendo el <a
href="http://www.solo10.com/productos/WebHostingLinux/?
safblogdephp">servicio de hosting</a> que ofrece esta empresa de
hablahispana!</p>
</div>
<p> </p>
<div class="Info">
<p><a href="http://www.blogdephp.com/">Ver ms artculos y scripts
de php y codeigniter</a></p>
</div>
</body>
</html>
Paso 3: Cdigo para el modelo
usuarios_model.php
<?php
class Usuarios_model extends CI_Model{
function ValidarUsuario($email,$password){ // Consulta
Mysql para buscar en la tabla Usuario aquellos usuarios que coincidan
con el mail y password ingresados en pantalla de login
$query = $this->db->where('Usuario',$email); // La consulta
se efecta mediante Active Record. Una manera alternativa, y en
lenguaje ms sencillo, de generar las consultas Sql.
$query = $this->db->where('Password',$password);
$query = $this->db->get('Usuarios');
return $query->row(); // Devolvemos al controlador la fila
que coincide con la bsqueda. (FALSE en caso que no existir
coincidencias)
}
}
?>
Paso 4: Consulta Mysql para crear la
tabla de usuarios
CREATE TABLE `Usuarios` ( `Id` INT NOT NULL AUTO_INCREMENT , `Usuario`
VARCHAR( 50 ) NOT NULL , `Password` VARCHAR( 50 ) NOT NULL , PRIMARY
KEY ( `Id` ) ) ENGINE = MYISAM ; INSERT INTO `Usuarios` ( `Id` ,
`Usuario` , `Password` ) VALUES ( NULL , 'diego@blogdephp.com',
'blogdephp' );
Paso 5: Importante: pre-cargar libreras
de CodeIgniter para base de datos y
validaciones de formularios
Abrir el archivo autoload.php, ubicado en la ruta /application/config/" y localizar
la siguiente lnea:
$autoload['libraries']=array();
Reemplazarla por:
$autoload['libraries'] = array('database','form_validation');
(esto es indispensable para poder utilizar los mtodos de validaciones que nos
brinda CodeIgniter).
Nota: La gran ventaja de cargar una librera desde el archivo autoload.php es que luego la tenemos
disponible, y podemos utilizarla, desde cualquier parte del Framework. De lo contrario, tendriamos
que cargar la librera en todos los controladores en que la necesitemos (ocasionando redundancia
de cdigo).
El controlador (php.php) toma los datos que nos envan del formulario de
autenticacin y realiza las correspondientes validaciones. Tambin consulta al
modelo (usuarios_model.php) si el usuario y clave indicados existen en algn
registro de la tabla de usuarios, es decir, su el usuario y clave son vlidos. Por
ltimo, este controlador decide si el usuario indicado pueda o no entrar a la
aplicacin, y comunica su decisin a la vista (login.php), que es la encargada
de mostrar la respuesta correspondiente en la pgina.
$_POST['maillogin']
(Esto accede a los valores llegados del formulario en el campo "maillogin")
$this->load->model('usuarios_model');
(Esto es una carga del modelo de usuarios "usuarios_model", de modo que se
puedan utilizar sus recursos en los controladores.)
$this->usuarios_model->ValidarUsuario($_POST['maillogin'],
$_POST['passwordlogin']);
(Esto es una llamada para ejecutar el mtodo ValidarUsuario que hay en el
modelo usuarios_model. En el que le pasamos dos parmetros).
Tenemos pensado mejorar este sistema de autenticacin de usuarios en el
futuro, con cosas como implementar que un usuarios pueda acceder a pginas
exclusivas con informacin nicamente vlida y accesible por l. Y cmo
acceder a la pgina sin tener que escribir en cada acceso sus sus de login, es
decir, que los tenga que escribir una nica vez y que la aplicacin los recuerde
en futuros accesos.
Autor
Ing. Diego Angelini
CEO & fundador de Blog de PHP | Responsable de programacin de la pgina
www.solo10.com
Subir
Manual
Manual de CodeIgniter
Compartir
2
inCompa rtir
Comentarios
Enviar un comentario al artculo
Javitxu
18/3/2011
Me da este error
A Database Error Occurred
Unable to select the specified database: db_comunio
Filename: C:xampphtdocssystemdatabaseDB_driver.php
Que puede ser? he creado la base de datos con el phpmyadmin, llamada db_comunio y
dentro de la carpeta config en el database.php he modificado esta linea:
$db['default']['database'] = 'db_comunio';
Te advierto que soy muy novato y me he podido dejar algo por el camino.
Marcar como spam
Blogdephp
18/3/2011
posibles motivos de no lograr conectar con la base de datos Mysql
Hola Javitsu,
Ten presente que adems de crear la base de datos Mysql, es necesario crear un usuario
Mysql y darle permisos sobre la base de datos.
En mi caso, todas estas tareas puede efectuarlas desde Cpanel (el panel de
administracin que me ofrece mi proveedor de hosting). Luego con phpMyAdmin puede
crear y administrar las tablas de la base de datos.
Una vez que tengas creado el usuario Mysql, con sus permisos respectivos, debes
indicarlo en el archivos database.php de la carpeta "config" (tal como has efectuado con el
nombre de la base de datos).
Saludos.-
Marcar como spam
javitxu
30/3/2011
En parte solucionado
Hola,
Javitxu
30/3/2011
Ya me funciona
Puede ser porque en el navegador acceda as:
localhost/index.php/php
localhost/index.php/php/login
Ese era mi fallo?
Marcar como spam
arguitos
05/4/2011
porque harcelo de cero
por que hacerlo de cero con TANK library te ahorras horas de programacion ademas es
completa
Marcar como spam
veronica
18/7/2011
agradecimiento
muy buena leccion. a la espera de mas informacion sobre este framer.
saludos
Marcar como spam
nico
21/7/2011
Password encriptado
Hola. No saben si hay forma de almacenar la contrasea encriptada en la base de datos y
luego compararla con la contrasea enviada en el post (con CI) ?
gracias de antemano
Marcar como spam
nico
24/7/2011
Password encriptado
Hola de nuevo. Ya encontr la forma de hacerlo. Uso la funcin sha1 para encriptar la
contrasea (antes de guardarla en la base de datos y antes de validarla).
Seguro que hay formas mejores de hacerlo pero esta es suficiente para mi.
Saludos
Marcar como spam
vero
01/8/2011
login con codeigniter
A PHP Error was encountered
Severity: Notice
Filename: controllers/php.php
Line Number: 11
Anonimo
15/9/2011
Duda xD
Me gusto mucho tu tutorial, solo que tengo una pregunta.
#producto|fecha ingreso|proveedor|descripcion
pero me gustaria que el usuario pueda presionar #producto y ordenarlos conforme a este
id. o por fecha de ingreso o por proveedor.
Desearia algo como la funcionalidad que tiene las tablas de mysql que al presionar algun
encabezado las ordena con respecto a el.
muchas gracias
Marcar como spam
sebastian
24/9/2011
encriptar
Hola, muy buen articulo, me gustaria saber como puedo encriptar el password para luego
tomarlo desde la BD. De antemano, muchas gracias.
Marcar como spam
Robinson
08/5/2012
Desarrollo de un Login con codeigniter
Necesito estoy empezando a programar con codeigniter, realice el codigo que ustedes nos
planteraron y me sale un error que hasta ahora no he podido resolver. Al presionar
cualquier cosa, que este o no en la base de datos, al presionar en el boton ingresar me
lleva a otra pagina con el siguiente mensaje, Disallowed Key Characters. Si alguien sabe el
porque de este aviso que por favor me lo haga saber.Gracias!!!
Marcar como spam
vicenrele
04/7/2012
function index() en el controlador
Hola.
No faltara poner en el controlador la function index()? Yo estoy probando y si no lo pongo
no funciona.
Debo decir que estoy probando con CI 2.1
PhiRequiem
07/8/2012
duda con function login.
Hi.
Excelente tutorial, gracias a ti me estoy familiarizando con CodeIgniter.
una duda por que la funcin "function login" no es public?
Marcar como spam
Alejandro Cascante
25/8/2012
Error de pgina no encontrada
Hola amigo, al enviar el formulario me carga esta pgina
index.php/php/login.php