Sigueme por RSS! RSS

CodeIgniter: autenticación de usuarios



Probando un poco las posibilidades que nos ofrece CodeIgniter, he programado un sistema de autenticación de usuarios, bastante sencillo. Que permite:
- validar que el email del usuario exista en la base de datos.
- validar que tanto el email y el password se encuentren registrados y pertenezcan a la misma cuenta.
- iniciar una sesión si los datos son correctos.
- establecer tiempo de expiración para la sesión y cerrarla si éste se ha consumido.
- cerrar la sesión en cualquier momento dado.

CodeIgniter es un framework de PHP bastante amigable, rápido y ligero, de instalación sencilla, que trabaja con el modelo vista controlador (MVC), hasta ahora es uno de los que más me ha gustado.

es un entorno de desarrollo abierto que permite crear Webs dinámicas con PHP. Su principal objetivo es ayudar a que los desarrolladores, puedan realizar proyectos mucho más rápido que creando toda la estructura desde cero.


Para efectos del ejemplo, es necesario que tengas conocimientos previos de como usar el framework, encontraras varios tutoriales en la red sobre su uso, como éste de desarrolloweb.com, éste otro de cristalab.com, incluso algunos vídeo-turiales.
 
El ejemplo trata de un sencillo sistema de control de sesión de usuarios, que dispone de los siguientes archivos principales:
login (modelo) -> se encarga del acceso a la base de datos, consultas, validaciones, etc.
login (vista) (interfaz de usuario) -> se encarga de mostrar en pantalla el formulario de acceso, así como, posibles mensajes de error.
login (controlador) -> se encarga de gestionar la información entre los modelos (models) y las vistas (view).

a parte otros tres archivos:
index (controlador) -> para controlar la sesión.
index (vista) -> que mostrara información al usuario dependiendo de si se ha logueado o no.
css_main --> la hoja de estilos usada.


Configuraciones y aclaraciones:
1.- para efectos del ejemplo se usa la versión del framework número 2.0.3
2.- dispongo en mi servidor de una carpeta de nombre codeigniter y dentro de ella se encuentran todos los archivos del sistema:

codeigniter
   -> application
        -> controllers
             -> login.php (controlador)
             -> index.php (controlador)
        -> models
             -> login_m.php (modelo)
        -> views
            -> login.php (vista)
            -> index.php (vista)
   -> system
   -> css
        ->  css_main.css
   -> index.php

3.- debemos configurar la base de datos (datos de conexión), nos vamos a "codeigniter --> application --> config --> database.php", lo abrimos e indicamos los datos correspondientes:
$db['default']['hostname'] = 'localhost'; // servidor
$db['default']['username'] = 'root';      // usuario de la base de datos
$db['default']['password'] = '1234';      // password de la base de datos
$db['default']['database'] = 'mi_db';     // nombre de la base de datos
$db['default']['dbdriver'] = 'mysql';     // manejador de base de datos a usar

4.- en el archivo routes.php indicamos el controlador a cargar por defecto:
codeigniter --> application --> config --> routes.php
$route['default_controller'] = 'login';

5.- he configurado algunas librerías para que se carguen por defecto, y por eso no se incluye su carga dentro del código:
en codeigniter --> application --> config --> autoload.php
// Auto-load Libraries
$autoload['libraries'] = array('database', 'session');
// Auto-load Helper Files
$autoload['helper'] = array('url');

6.- en el archivo config.php también hay que configurar algunas cosas:
codeigniter --> application --> config --> config.php
// clave usada para codificar datos, y servira para decodificarlo luego
$config['encryption_key'] = 'aqui_tu_clave';

// filtro xss
$config['global_xss_filtering'] = true; // lo habilitamos por defecto

7.- para el ejemplo solo usaremos una tabla (usuarios), pero la dejo tal y como la usaremos al momento de programar el modulo de registro de usuarios que es complemento de éste.
-- aca almacenamos los tipos de usuarios: administradores, limitados, etc
CREATE TABLE IF NOT EXISTS tipo_usuario (
  id_tipo_usuario TINYINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  nombre VARCHAR(25) NOT NULL,
  descripcion VARCHAR(100) NOT NULL DEFAULT ''
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

CREATE TABLE IF NOT EXISTS usuarios 
(
   id_usuario INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
   id_tipo_usuario TINYINT NOT NULL,
   nombre VARCHAR(25) NOT NULL,
   email VARCHAR(50) NOT NULL,
   password VARCHAR(32) NOT NULL,
   codigov CHAR(20) NOT NULL,
   activa TINYINT NOT NULL DEFAULT 0,
   FOREIGN KEY (id_tipo_usuario) 
   REFERENCES tipo_usuario(id_tipo_usuario)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO tipo_usuario (nombre,descripcion) VALUES 
('administrador','usuario de nivel 1 - todos los privilegios');

-- registro de ejemplo, password:12345678
--INSERT INTO usuarios (id_tipo_usuario,nombre,email,password,codigov,activa) VALUES 
--(1,'user','id@hotmail.com','25d55ad283aa400af464c76d713c07ad','25aa400af467d55ad283',1);

7 comentarios: Suscribete a los comentarios por RSS

Liliana

Cass hola esta genial tu archivo era justo lo que andaba buscando, estoy comenzando apenas con codeigniter. Ojala pudieras explicar lo parte de duracion de la sesion =D mil gracias.

Valdira ;D

Marco Rivera

Por qué a la hora de cargar la vista (http://localhost/login/index.php/login/) si me carga el formulario del login, pero cuando le doy click en el botón, me redirecciona a la función validar_form, pero me pone esta url (http://localhost/login/login/validar_form) y me dice que (Page not Found)?

Reinaldo Cassiani (cass)

Eso es porque no encuentra el controlador, la segunda ruta esta mal, la tienes así:
http://localhost/login/login/validar_form

pero falta el "index.php", debería ser así:
http://localhost/login/index.php/login/validar_form

Si te carga bien la vista con la primera ruta, debería acceder de igual manera ala función "validar_form", eso, si no has cambiado algo en el código.

Meissner

Buen día, excelente aporte .. funcionó perfectamente. Mi pregunta es si hay más de un tipo usuario y quiero que me lleve a diferentes vistas dependiendo de los permisos que tenga ese usuario , qué debo modificar ? Y y que ese usuario vea solamente lo de el ? Es decir , si hay dos usuarios cada uno tendrá diferente información espero haber sido claro , de nuevo muchas gracias soy nuevo en codeigniter

Reinaldo Cassiani (cass)

Hola, en ese caso entran en juego los hooks en CodeIgniter, dado que se ejecutan antes que cualquier controlador, es ahí donde debes validar el tipo de usuario, si no es administrador por ejemplo, le bloqueas el acceso redireccionandolo a otro controlador.

Publicar un comentario

- Los comentarios están siendo moderados y serán publicados en la brevedad posible.