Debe introducir al menos 3 caracteres en el buscador.
Inicio / Wikis / Monografías / Introducción a PHPLib, 2da parte - Autentificación, clase Auth

Introducción a PHPLib, 2da parte - Autentificación, clase Auth

 ----- 
CopyLeft Monografía de Ricardo Muñoz (rmunoz@tux.cl) - 02 de Marzo de 2006
Temas Relacionados: PHP
3. Autentificación, clase Auth
La autentificación puede ser usada para autentificar una sesión, es decir, identificar al usuario que se encuentra al lado cliente de la sesión.

La autentificación que ofrece PHPLib es realizada con formularios HTML, no mediante la autentificación HTTP (la ventana popup que aparece cuando se trata abrir una página protegida con htaccess). La autentificación que usa PHPLib tiene varias ventajas:

  • Se puede deshacer. Una sesión puede ser des-autentificada, el usuario puede hacer un “log out”.
  • Puede expirar. Una sesión se podría des-autentificar automáticamente después de cierto tiempo.
  • Puede ser configurada. No se está limitado al par usuario/contraseña. Se podría usar un número de cliente, identificador de operador y una password para hacer login. También, se tiene un control completo de la pantalla de login, que es una página HTML normal.
  • Es basada en base de datos. La autentificación es realizada contra una base de datos de diseño propio, no un archivo de texto htpasswd.
  • Es por página. Uno decide, según la página, cuales serán autentificadas y cuales no.
  • Se puede integrar con un esquema de verificación de permisos.

La autentificación de PHPLib hace uso de la clase Auth.

3.1 Variables de Auth


  • classname. Nombre de la clase.
  • lifetime. Cantidad máxima de tiempo ocioso antes de que la autentificación expire. Si se deja en 0, la autentificación nunca expirará (siempre y cuando la sesión se mantiene activa).
  • refresh. Cantidad máxima de tiempo antes de que la información de autentificación (por ejemplo permisos) son re-leídos de la base de datos usando el método auth_refreshlogin(). Si se deja en 0, la información de autentificación sólo es leída al momento del login.
  • mode. Modo de autentificación: log o reg.
  • database_class. Nombre de clase. Auth usa esta clase para establecer una conexión a la base de datos.
  • database_table. Tabla de base de datos para guardar las variables de sesión.
  • magic. Valor arbitrario usado en la generación del uniqid.
  • nobody. Un flag: si está en true, se usa autentificación por defecto.

3.2 Ejemplo de una sub-clase Auth


La siguente clase, a su vez sub-clase de Auth, se llamará Prueba_Auth, y en la cuál bastaría con definir:

  var $classname      = "Prueba_Auth";  # nombre de la clase.  var $lifetime       = 15;             # duración de la sesión autentificada.  var $database_class = "DB_Prueba";    # clase de conexión a BD.  var $database_table = "auth_user";    # tabla con la info de los usuarios.

Luego nuestra clase Prueba_Auth quedaría como:

class Prueba_Auth extends Auth {   var $classname      = "Prueba_Auth";  var $lifetime       = 15;     # minutos  var $database_class = "DB_Prueba";  var $database_table = "auth_user";    function auth_loginform() {    global $sess;    global $_PHPLIB;         # nombre de archivo html que mostrará el formulario        # usuario/contraseña cuando no exista una sesión        # autentificada o esta haya expirado.        # por defecto este archivo se encuentra en $_PHPLIB["libdir"]     include($_PHPLIB["libdir"] . "loginform.ihtml");          }    function auth_validatelogin() {    global $HTTP_POST_VARS;     if(isset($HTTP_POST_VARS["username"])) {      $this->auth["uname"] = $HTTP_POST_VARS["username"];    }       # uid se deja en falso.     $uid = false;        # se consulta si la combinación usuario/contraseña    # existe en tabla de usuarios.     $this->db->query(sprintf("select user_id, perms ".                             "        from %s ".                             "       where username = '%s' ".                             "         and password = '%s'",                          $this->database_table,                          addslashes($HTTP_POST_VARS["username"]),                          addslashes($HTTP_POST_VARS["password"])));     # se obtiene el uid y los permisos del usuario si existe.    while($this->db->next_record()) {      $uid = $this->db->f("user_id");      $this->auth["perm"] = $this->db->f("perms");    }     # retorna el uid, si usuario no existe retornará uid = false.    return $uid;  }}

3.3 Ejemplo de una página restringida


Una vez configuradas correctamente nuestras clases de sesión y autentificación, podriamos crear una página restringida sólo a usuarios vlidos, específicamente los que se encuentran en nuestra tabla auth_user.

Acá es donde el PHPLib se luce... basta que usemos las funciones page_open() y page_close(), al inicio y final de la página respectivamente para que todo lo que se encuentre entre estas funciones sólo pueda ser ejecutado por usuarios autentificados.

<?php # page_open recibe como parametros las clases sess, auth y perm# previamente configuradas, validando al usuario/contraseña ingresado# vía el formulario que se muestra la primera vez. page_open(array("sess" => "Prueba_Session",                 "auth" => "Prueba_Auth",                "perm" => "Example_Perm")); /* código restringido a usuarios válidos */ # la funcion page_close() se debe ejecutar siempre al final de la# página para que se guarde/mantenga la info de la sesión. page_close(); ?>

La idea es que cada página restringida lláme a las funciones page_open() y page_close(), y cada vez que se acceda a las páginas se verificará si existe una sesión autentificada, si no es el caso, se mostraró el formulario (que es totalmente personalizable) de usuario/contraseña.

3.4 Terminar una sesión autentificada


Para terminar (eliminar) una sesión bastaría con ejecutar el método logout() de la clase Auth:

$auth->logout();

Para esto, podriamos crear una pgina salir.php que quedaría como:

<?php # verificamos si existe una sesiónpage_open(array("sess" => "Prueba_Session", "auth" => "Prueba_Auth","perm" => "Example_Perm")); # se termina la sesión$auth->logout(); # volvemos al index.php sin mostar nada en pantallaheader("location: index.php"); ?>
Autor y licencia de 'Introducción a PHPLib, 2da parte - Autentificación, clase Auth'
Ricardo Muñoz (rmunoz@tux.cl) Extraído de: http://www.tux.cl/doku.php?id=articulos:linux:el_kernel_de_linux CopyLeft
Copyleft 2000-2006 Tux.cl
Este contenido ha sido recopilado por el equipo de Wikilearning. Todo el contenido recopilado se ha obtenido respetando y comunicando en nuestro site la licencia de cada fuente.
Wikilearning tiene permiso expreso por escrito de los autores para publicar los contenidos que ha extraído de otras webs, incluyendo su uso comercial.

Wikis relacionados con 'Introducción a PHPLib, 2da parte - Autentificación, clase Auth'

Cualquier aplicación web mediana o grande necesita manejar usuarios. En este artículo se mostrará el... Más »
Este curso profundiza en la implementación de la clase CString dentro del framework MFC. Se... Más »
En la edición anterior, se explicó las bases de Netfilter/IPTables. En esta segunda entrega, se... Más »
Este es el Diccionario de Plantas Mágicas elaborado por nosotr@s. Esta basado en nuestra propia... Más »
Entre todos los seres vivientes el hombre es el único que tiene que darse una... Más »
¿Estás seguro de que deseas eliminar este capítulo?