Autenticación de Usuarios en PHP y MySql _ Notas de Programación

download Autenticación de Usuarios en PHP y MySql _ Notas de Programación

of 22

description

N

Transcript of Autenticación de Usuarios en PHP y MySql _ Notas de Programación

  • 15/6/2015 AutenticacindeusuariosenPHPyMySql|NotasdeProgramacin

    http://www.notasprogramacion.com/2014/10/autenticaciondeusuariosenphpymysql/ 1/22

    Twittear 1 2 1

    InicioContactoAcerca de

    Acercade

    InicioJavaPHPSpring

    SpringPHP

    Autenticacin de usuarios en PHP y MySqlPublicado pornotasproel 19 octubre, 2014

    Este tutorial es una replica de Autenticacin de usuarios en PHP y MySql . Como deca anteriormente, en algunos sistemas a veces unrequerimiento es que se manejen privilegios y por lo tanto usuarios, esto con el fin de controlar lo que cada usuario puede hacer/ver unavez dentro del sistema. En esta entrada nicamente se muestra como autenticar a los usuarios para entrar al sistema, es decir, cadausuario tendr los mismos privilegios; aunque la tabla de usuarios de MySql (que mostrare mas adelante) ya incluye un campo quedetermina el tipo de usuario este campo no sera utilizado por ahora. Sin mas prembulos muestro el ejemplo

    La base de datos

    Como siempre que voy a hacer uso de una BD, empezare mostrando el script para recrear las tablas que usare en el ejemplo:

    La base de datos que usare se llama prueba. Como se observa nicamente son dos tablas, ademas, he creado un catalogo con losdiferentes tipos de usuario que pudiera haber, solo he aadido dos tipos de usuario (Administrador y Usuario normal) a modo deejemplo, pero se pueden aadir mas. Si observas, inserto un usuario de prueba. Si quieres asignar otro password al usuario de prueba

    3Like

    123456789101112131415161718192021222324252627282930313233343536373839404142

    /* www.notas-programacion.com Descripcion: Archivo con script para crear la bd y las tablas de este ejemplo. Archivo: scripts_sql.sql*/ create database prueba;/*Crear Catalogo de tipos de usuario */create table ctg_tiposusuario(id_TipoUsuario int not null auto_increment,tx_TipoUsuario varchar(100),primary key(id_TipoUsuario));/* Catalogo de usuarios */create table tbl_users(id_usuario int not null auto_increment,tx_nombre varchar(50) not null,tx_apellidoPaterno varchar(50),tx_apellidoMaterno varchar(50),tx_correo varchar(100),tx_username varchar(50),tx_password varchar(250),id_TipoUsuario int,dt_registro datetime,primary key(id_usuario),foreign key(id_TipoUsuario) references ctg_TiposUsuario(id_TipoUsuario));/*Insertar tipos de usuarios de prueba*/INSERT INTO `ctg_tiposusuario`( `tx_TipoUsuario`) VALUES ('Administrador');INSERT INTO `ctg_tiposusuario`( `tx_TipoUsuario`) VALUES ('Usuario Normal');/*passwrd: 12345*//*Insertar usuario de prueba*/INSERT INTO tbl_users (tx_Nombre,tx_apellidoPaterno,tx_apellidoMaterno,tx_correo,tx_username,tx_password,id_TipoUsuario,dt_registro) VALUES('Gonzalo','Silverio','Silverio','[email protected]','gonzasilve','827ccb0eea8a706c4c34a16891f84e7b',1,'2012-11-09 17:35:40');

  • 15/6/2015 AutenticacindeusuariosenPHPyMySql|NotasdeProgramacin

    http://www.notasprogramacion.com/2014/10/autenticaciondeusuariosenphpymysql/ 2/22

    puedes utilizar esta sencilla herramienta que te permite generar un Md5 a partir de una cadena cualquiera: obtener_md5.php

    Supongo que para el momento de estar leyendo este articulo ya tienes el software necesario (ho al menos piensas instalarlo). Como hevisto que los visitantes muchas veces son estudiantes de carrera ho aficionados a la programacin; pero con poca experiencia (meincluyo), voy a listar las herramientas de software necesarias que debes tener y en tu maquina si quieres probar este exquisito cdigo :),puedes usar otro servidor y otro DBMS, pero yo use estas:

    Servidor apache (2 o sup. de preferencia)PHP (5 o sup)MySql (5 o sup.)JQueryUn servidor de correo, en este caso yo use hMailServer.

    Como ves son pocos requisitos, si no tienes alguno este es el momento para que lo instales. El servidor de correo de hecho es opcional,solo lo instale para hacer pruebas en mi computadora local (una laptop), si tienes dudas sobre hMailServer en la misma pagina vienemucha documentacin acerca de como instalarlo y configurarlo. Si tienes ms dudas puedes preguntarle al orculo (google) escribiendoesto hmailserver y php.

    Bueno vamos a lo interesante

    El cdigo fuente

    index.phpEste archivo permite mostrar la ventana de Login, es en esta como es de suponerse el usuario introduce su nombre de usuario, supassword y le da click al botn enviar, bueno muestro el cdigo:

    123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263

    .:: Login ::. Ejemplo autenticar usuarios

    Iniciar sesin

    Usuario

    Password

    Olvide mi contrasea

  • 15/6/2015 AutenticacindeusuariosenPHPyMySql|NotasdeProgramacin

    http://www.notasprogramacion.com/2014/10/autenticaciondeusuariosenphpymysql/ 3/22

    Como se puede ver para mostrar los mensajes de error utilizo la librera JQuery, ya que me pareci que usar un alert() de javascript esalgo feito, jajajaj. Como se ve el archivo en si solamente crea un formulario en el cual se dibujan dos cajas de texto; una para el usuario yotra para el password, un link para ir a la pantalla de recuperacin del password en caso de que al usuario se le haya olvidado y porultimo se crea un botn tipo submit para enviar la informacin. Para validar campos vacos tambin utilizo JQuery. Ademas se puede verque envi los dos datos de las cajitas a un archivo llamado validarUsuario.php por el mtodo POST; el cual se encargara de acceder a laBD y verificar que los datos sean correctos.

    Otra cosa interesante que se puede observar es que este archivo verifica si le llega un parmetro llamado msg_error (con la funcinisset() de php) y en base a ese parmetro (en realidad es un cdigo de error) muestra un mensaje de error. A continuacin muestro unpantallazo como se ve el formulario en el navegador Chrome:

    646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136

    Deseo registrarme

    jAlert("El usuario o password son incorrectos.", "Seguridad");$("#password").focus();jAlert("La seccion a la que intentaste entrar esta restringida.\n Solo permitida para usuarios registrados.", "Seguridad"jAlert("Gracias, ha sido registrado exitosamente.\n Se le ha enviado un correo electronico de bienvenida, \npor favor, NO LO CONTESTE pues solo es informativo."jAlert("Gracias, ha sido registrado exitosamente.\n No se le ha podido enviar correo electronico de bienvenida, \nsin embargo, ya puede utilizar sus datos de acceso para iniciar sesion.."jAlert("Temporalmente NO se ha podido registrar, intente de nuevo mas tarde.", "Registro");

  • 15/6/2015 AutenticacindeusuariosenPHPyMySql|NotasdeProgramacin

    http://www.notasprogramacion.com/2014/10/autenticaciondeusuariosenphpymysql/ 4/22

    Y en caso de que el usuario introduzca un nombre de usuario incorrecto se mostrara esta pantalla:

    Como se observa se ven mas atractivas las alertas con JQuery y ademas es sumamente fcil utilizarlas.

    validarUsuario.phpEste archivo es el que se encarga de recibir los datos del archivo index.php y los compara contra los que estn en la BD. Si el usuario y elpassword son correctos (existen en la BD) guarda el id del usuario en un formulario (el dato se enva oculto, hidden), inicializa una sesin ,guarda algunas variables en dicha sesin y redirecciona hacia el archivo principal.php el cual es la pagina web que se supone debemostrarse para usuarios registrados. En caso de que el usuario y/o password sean incorrectos entonces este archivo guarda igualmenteun codigo de error en un formulario y redirecciona a la pagina de login, es decir, al archivo index.php.

    A continuacin se muestra su cdigo fuente:

    1234567891011121314151617

  • 15/6/2015 AutenticacindeusuariosenPHPyMySql|NotasdeProgramacin

    http://www.notasprogramacion.com/2014/10/autenticaciondeusuariosenphpymysql/ 5/22

    Como se observa; la mayora del cdigo esta comentado por lo que me ahorrare volver a explicar: Lo que si quiero mencionar es que enla linea 40 he dejado un comentario (CDIGO DE SESIN), en esa linea si usted quiere puede generar un identificador de sesin, debido aque el ID de sesin de PHP a veces se pierde; usted puede crear un ID mas seguro; por ejemplo con base a la fecha y hora actual. lafuncin session_id() permite leer o asignar el ID de la sesin.

    La funcin session_start() permite iniciar una sesin o continuar una ya iniciada. Es por eso que en todas las paginas web que requieranque el usuario este autenticado se llama a esta funcin de PHP, esto lo podrs ver en los dems archivos que mostrare mas adelante.

    En la linea 37 a 39 se observa que es muy fcil crear una variable de sesin con ayuda del array global $_SESSION[], basta con agregar unnuevo tem y asignarle un valor, as de fcil. Posteriormente se pueden utilizar en cualquier pagina php por ejemplo para mostrar el Id delusuario y su Status en el navegador:

    Facil No?. Continuemos

    En la linea 12 del archivo validarUsuario.php se inserta un archivo llamado conectar_bd.php el cual se encarga de conectar con elDBMS, este archivo es el que muestro a continuacion

    conectar_bd.php

    1819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364

    $pw_enc = md5($pw); $sql = "SELECT id_usuario FROM tbl_usersINNER JOIN ctg_tiposusuarioON tbl_users.id_TipoUsuario = ctg_tiposusuario.id_TipoUsuarioWHERE tx_username = '".$usr."'AND tx_password = '".$pw_enc."' "; $result =mysql_query($sql,$conexio); $uid = ""; //Si existe al menos una filaif( $fila=mysql_fetch_array($result) ){//Obtener el Id del usuario en la BD $uid = $fila['id_usuario'];//Iniciar una sesion de PHPsession_start();//Crear una variable para indicar que se ha autenticado$_SESSION['autenticado']= 'SI';//Crear una variable para guardar el ID del usuario para tenerlo siempre disponible$_SESSION['uid']= $uid;//CODIGO DE SESION //Crear un formulario para redireccionar al usuario y enviar oculto su Id?>

    //Redireccionar con el formulario creadodocument.formulario.submit();

    12

    echo "Id del usuario:".$_SESSION['uid'];echo "Ha iniciado sesion:".$_SESSION['autenticado'];

    123456789101112131415161718192021

  • 15/6/2015 AutenticacindeusuariosenPHPyMySql|NotasdeProgramacin

    http://www.notasprogramacion.com/2014/10/autenticaciondeusuariosenphpymysql/ 6/22

    Como se observa primero se definen los datos de conexin en variables locales a la funcin conectar_bd(). y posteriormente estasvariables se usan como parmetros para llamar a la funcin mysql_connect(), la cual es la que hace la peticin al DBMS para conectarse.La funcin mysql_connect() devuelve un link que representa la conexin establecida al dbms, con este link guardado en la variable$conexio se selecciona la BD a utilizar (linea 24).

    principal.phpEste archivo es la pantalla que el usuario ve si se logueo correctamente, nada mas como ejemplo he creado una muy sencilla. Cuando elusuario accede a esta pagina web se supone que ya paso por la pantalla de login y sus datos fueron verificados en la BD. Pero porseguridad antes de mostrarla verifico que efectivamente este logueado a travs de las variables de sesin que fueron creadas en elarchivo validarUsuario.php.

    A continuacin muestro el cdigo fuente:

    2223242526

    //Seleccionar la BD a utilizarmysql_select_db($laBd, $conexio ) or die (mysql_error());}?>

    12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273

    document.formulario.submit();

    .:: Inicio ::. Ejemplo autenticar usuarios

    Bienvenido Cerrar sesin

    Pantalla Principal

  • 15/6/2015 AutenticacindeusuariosenPHPyMySql|NotasdeProgramacin

    http://www.notasprogramacion.com/2014/10/autenticaciondeusuariosenphpymysql/ 7/22

    Como deca en la lineas anteriores, cuando una pagina esta restringida lo primero que se debe hacer es verificar que el usuario estalogueado y tiene permisos para ver dicha pagina. Como dije que no mostrara como dar permisos a los usuarios, en este ejemplo solo secomprueba que haya una sesin iniciada y que exista entre las variables de sesin un UID (User Id); Id del usuario en la Base de datos.

    Si se verifica que esas condiciones se cumplen entonces se obtienen los datos del usuario, tal como su nombre , correo electrnico, etc.Yo solo saque su nombre completo y lo mostr en la esquina superior derecha para que el usuario tenga la sensacin que a entrado alportal. A continuacin muestro un pantallazo de este archivo en el navegador:

    Como se observa tambin se ha puesto al usuario un link para que cierre su sesin.

    Seguridad

    Imaginemos que un usuario malintencionado escribe directamente la URL de este archivo en su navegador (escribehttp://localhost/autenticar_usuarios/principal.php) pensando que con esto puede entrar y ver el contenido del sitio. Perder sutiempo pues para eso precisamente se hace la validacin al inicio y solamente vera un mensaje de error como el que se ve a continuacin:

    cerrarSesion.phpEste archivo es al que apunta el enlace Cerrar sesin que esta a un lado del nombre de usuario (una vez que ha iniciado su sesin).Este archivo se encarga de destruir todas las variables de sesin y terminar la sesin; todo esto se hace con las funciones que PHP ya traeincluidas.

    12345

  • 15/6/2015 AutenticacindeusuariosenPHPyMySql|NotasdeProgramacin

    http://www.notasprogramacion.com/2014/10/autenticaciondeusuariosenphpymysql/ 8/22

    Como se ve es muy corto el archivo. No doy mas explicacion ya que cada instruccion esta comentada.

    recuperarPassword.phpEn la pagina de login, si observas hay un link que dice Olvide mi contrasea, este link nos manda al archivo recuperarPassword.php.Este archivo permite enviar un nuevo password al usuario, el usuario solo debe escribir su correo electrnico y automticamente segenerara un nuevo password de nueve caracteres y se le enviara a dicho email. Obviamente que el correo proporcionado se valida queexista en la BD; Como se observa en la BD el password esta cifrado en MD5 por lo que es necesario proporcionarle otro; no hay formadescifrar el password anterior.

    6789101112131415161718

    ademas redirecciona nuevamente a la pagina de login. Archivo:cerrarSesion.php */session_start();// Destruye todas las variables de la sesionsession_unset();// Finalmente, destruye la sesionsession_destroy(); //Redireccionar a la pagina de loginheader ("Location: index.php"); ?>

    1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071

    .:: Recuperar Password ::.

    Recuperar Password

  • 15/6/2015 AutenticacindeusuariosenPHPyMySql|NotasdeProgramacin

    http://www.notasprogramacion.com/2014/10/autenticaciondeusuariosenphpymysql/ 9/22

    72737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169

    if ( !( $fila = mysql_fetch_object($rs_sql) )) { ?> location.href="recuperarPassword.php?error="+document.getElementById('error').value;

  • 15/6/2015 AutenticacindeusuariosenPHPyMySql|NotasdeProgramacin

    http://www.notasprogramacion.com/2014/10/autenticaciondeusuariosenphpymysql/ 10/22

    Primero que nada una imagen de la pantalla que se muestra al abrir el archivo recuperarPassword.php:

    Para mas seguridad el password nunca se muestra al usuario, por el contrario; se le asigna otro (formado aleatoriamente) y se le envapor correo electrnico. Como se observa en la linea 58 se comienza comprobando si llega un parmetro llamado correo; si llega estoquiere decir que el formulario de recuperacin de password ya fue enviado y el correo que esta llegando es de un usuario al que se ledebe asignar un nuevo password. Por el contrario; sino llega, se dibujan dos cajas de texto para permitir al usuario escribir su correoelectrnico y se le pueda enviar su password.

    Bueno, supongamos que a este archivo le llega el parmetro correo, entonces de la linea 65 a la linea 81 se comprueba si ese emailexiste en la BD. Si no existe, entonces se redirecciona al usuario a este mismo archivo pero con un cdigo de error, el cual servir paramostrar un texto al usuario avisando que su correo electrnico no existe. En caso de que si exista el email en la BD (no se cumple lacondicin de la linea 73) entonces se recuperan los datos del usuario (linea 83 a la 85) y posteriormente se le genera un nuevo password(linea 88 ), observe la forma como he generado el nuevo password; se manda a llamar a la funcin obtenToken($longitud) que estadefinida en el archivo generar_token.php del cual hablare mas adelante.

    Y ya por ultimo se le enva el password a su correo electrnico del usuario (linea 90 a la linea 139). Algo que me gustara resaltar es que elnuevo password debe ser actualizado en la BD para que la prxima vez el usuario intente iniciar sesin pues este password sea valido,ademas, solo se debe de actualizar despus de notificar al usuario (envi de email correcto), tal como se hace en este ejemplo.

    A continuacin pongo una imagen del error que aparece en caso de que el email escrito no exista:

    170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206

  • 15/6/2015 AutenticacindeusuariosenPHPyMySql|NotasdeProgramacin

    http://www.notasprogramacion.com/2014/10/autenticaciondeusuariosenphpymysql/ 11/22

    Mensaje en caso de que el email haya sido enviado correctamente:

    Ya no pongo el mensaje del error en caso de que NO se envi el email (falle la funcin mail() de php), porque es muy obvia, pero, acontinuacin dejo una imagen del Email que le llega al usuario, con sus nuevos datos de acceso:

    En la linea 63 del archivo recuperarPassword.php se inserta el archivo generar_token.php el cual contiene algunas funciones paragenerar tokens de seguridad. Este mismo archivo lo explique en un articulo previo a este, te recomiendo leer el articulo para comprendersu funcionamiento. A continuacin pongo el cdigo fuente de este archivo:

  • 15/6/2015 AutenticacindeusuariosenPHPyMySql|NotasdeProgramacin

    http://www.notasprogramacion.com/2014/10/autenticaciondeusuariosenphpymysql/ 12/22

    generar_token.php

    Registro de usuarios

    A peticin de muchos de los visitantes que preguntan (ya sea en privado o en comentarios de esta entrada) como registrar usuarios enphp decid exponer un ejemplo. En la pantalla de Login si observas aparece un enlace (hipervinculo) con la leyenda Deseo registrarme;el cdigo que muestro a continuacin es del archivo que se muestra en el navegador al dar click en dicho enlace. Este archivo, enresumen, muestra un formulario creado con HTML para que el usuario capture sus datos personales y datos de acceso (username ypassword) envi dichos datos al script guardarRegistro.php que guarda los datos en la base de datos. El codigo es este

    registro.php

    1234567891011121314151617181920212223242526272829303132333435363738394041

    12345678910111213141516171819202122232425262728293031323334353637

  • 15/6/2015 AutenticacindeusuariosenPHPyMySql|NotasdeProgramacin

    http://www.notasprogramacion.com/2014/10/autenticaciondeusuariosenphpymysql/ 13/22

    3839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135

    .:: Registrar Usuario ::.

    Registrar usuario

    Gracias por tu inters en registrarte. Para hacerlo, solo debes llenarlos siguientes campos y pulsar el botn Registrarme. Para hacer mas rpido el registro yas tu puedas acceder al contenido, tu cuenta se activa inmediatamente.

  • 15/6/2015 AutenticacindeusuariosenPHPyMySql|NotasdeProgramacin

    http://www.notasprogramacion.com/2014/10/autenticaciondeusuariosenphpymysql/ 14/22

    Como puedes observar esta un poco extenso (como 200 lineas sin lineas en blanco); ese es el precio de validar de una manera rigurosalos datos que el usuario introduce en los cuadros de texto. Tratare de explicar un poco este archivo, pero antes te muestro una imagen dela pagina web que se genera a partir del cdigo fuente anterior:

    136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223

    Nombre(s)

  • 15/6/2015 AutenticacindeusuariosenPHPyMySql|NotasdeProgramacin

    http://www.notasprogramacion.com/2014/10/autenticaciondeusuariosenphpymysql/ 15/22

    De la linea 10 a 16 se declaran y limpian variables, una para cada dato del usuario que se va a registrar, enseguida en la linea 18 severifica si esta llegando (si existe, con isset()) la variable de str_nombre, si se cumple que si existe dicha variable; hay una variable con elmismo nombre que se declaro antes (linea 10), entonces se le asigna el valor que llega. Cuando llegan datos significa que ya se habanenviado los datos al archivo guardarRegistro.php y ste los esta regresando si no los pudo guardar. Esta operacin la realiza para cadadato del usuario.

    Si continuamos viendo el cdigo se observa que de la linea 50 a la 117 es codigo javascript donde ajustamos parmetros del plugin devalidacin de JQuery. A este tipo de validacin se le conoce como validacin del lado cliente, en este caso el cliente es el navegador.

    En la linea 124 se observa que esta escrito el encabezado del formulario y en su parametro action estamos diciendole que envie los datosde dicho formulario al archivo guardarRegistro.php el cual se encargara de guardarlos en la base de datos (no sin antes validarlos en ellado servidor).

    En la linea 141 estamos verificando si existe/llega una variable llamada error y en caso de que si, mostramos la lista de errores queocurrieron al guardar. La lista de errores vienen en otra variables llamada msg_error. Observa como en la linea 146 y 150 se abre y cierra,respectivamente una lista desordenada de HTML, la variable msg_error trae los correspondientes, cada es un error queocurri al intentar guardar en el archivo guardarRegistro.php. En caso de que hayan ocurrido errores se mostrara una pantalla similar aesta:

  • 15/6/2015 AutenticacindeusuariosenPHPyMySql|NotasdeProgramacin

    http://www.notasprogramacion.com/2014/10/autenticaciondeusuariosenphpymysql/ 16/22

    guardarRegistro.php

    Este archivo recibe los datos del archivo registro.php y los guarda en la base de datos. Antes de guardar realiza varias validaciones, masabajo esta la explicacin pero, veamos el cdigo

    12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849

  • 15/6/2015 AutenticacindeusuariosenPHPyMySql|NotasdeProgramacin

    http://www.notasprogramacion.com/2014/10/autenticaciondeusuariosenphpymysql/ 17/22

    5051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147

    }for($i=0; $i

    .:: Registrar Usuario ::.

  • 15/6/2015 AutenticacindeusuariosenPHPyMySql|NotasdeProgramacin

    http://www.notasprogramacion.com/2014/10/autenticaciondeusuariosenphpymysql/ 18/22

    148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245

  • 15/6/2015 AutenticacindeusuariosenPHPyMySql|NotasdeProgramacin

    http://www.notasprogramacion.com/2014/10/autenticaciondeusuariosenphpymysql/ 19/22

    Empezamos recogiendo en variables locales a este archivo los datos que nos llegan del archivo registro.php, esto se hace de la linea 8 ala l6. Despus definimos 4 funciones, las cuales mas adelante nos servirn para hacer validaciones con los datos que acabamos de recibir.Cada una tiene un breve explicacin as que me ahorrare volver a hacerlo.

    De la linea 64 a la 99 validamos que los datos que llegan no vengan vacos (en blanco), ademas para algunos campos como el usernamey password validamos su tamao. Observa como para cada campo que pudiera venir vaci o no cumplir el tamao se siguen revisandolos dems pero se agrega un tem con la descripcin del error. En la linea 104 se revisa si la lista NO esta vaca, sino esta vacaentonces regresamos todos los datos al archivo registro.php, para que el usuario no tenga que volver a escribirlos y solo corrija los quetienen error, y ademas mandamos una variable llamada error y la lista de errores que ocurrieron (con su descripcin). Ademas demandar los errores debemos detener la ejecucin de este archivo, esto se hace en la linea 124.

    Supongamos que no hubo errores de campos en blanco ni tamaos, entonces no se cumplir la condicin de la linea 104, entonces, elinterprete de PHP se saltara hasta la linea 126 y continuara su ejecucin

    Lo que haremos ahora sera validar que el nombre de usuario y el email escritos no existan en la BD, si algunos de los dos ya fueregistrado volveremos a direccionar la ejecucin al archivo registro.php para que escriba otro username/password. Esto se hace de lalinea 151 a 221, el cdigo esta comentado por lo tanto evitare redundar en la explicacin.

    Tal y como dice la linea 224, si la ejecucin llega hasta dicha linea es que todos los datos son validos (han pasado las validaciones),

    246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317

    ".$i_TipoUsuario.",'".date("Y-m-d H:i:s")."');"; $log .=$queryInsert.""; //echo $log;//exit; mysql_query($queryInsert); // LeEnvioun correo electronicode bienvenida$destinatario = $str_correo;//A quien se envia$nomAdmin = 'Webmaster Notas programacion'; //Quien envia$mailAdmin= '[email protected]'; //Mail de quien envia$urlAccessLogin = 'http://localhost/autenticar_usuarios'; //Url de la pantalla de login $elmensaje = "";$asunto = $str_elNombre.", Gracias por registrarte!"; $cuerpomsg ='.::Registrar usuarios::.Le damos la mas cordial bienvenida, desde ahora usted podra gozar de los beneficios dehaberse identificado y acceder a contenido exclusivo de esta comunidad.Sus datos de acceso para '.$urlAccessLogin.' Nombre '.$str_elNombreCompleto.' Nombre de usuario '.$str_username.' Password '.$str_password.' Gracias por su preferencia, hasta pronto. '; date_default_timezone_set('America/Mexico_City'); //Establecer cabeceras para la funcion mail()//version MIME$cabeceras = "MIME-Version: 1.0\r\n";//Tipo de info$cabeceras .= "Content-type: text/html; charset=iso-8859-1\r\n";//direccion del remitente$cabeceras .= "From: ".$nomAdmin." ";$i_EmailEnviado = 0; //Si se envio el emailif( mail($destinatario,$asunto,$cuerpomsg,$cabeceras) )$i_EmailEnviado = 1; //Cerrrar conexion a la BDmysql_close($conexio); // Mostrar resultado del registro?>

  • 15/6/2015 AutenticacindeusuariosenPHPyMySql|NotasdeProgramacin

    http://www.notasprogramacion.com/2014/10/autenticaciondeusuariosenphpymysql/ 20/22

    entonces procedemos a darlo de alta en la base de datos. Despus de formar la sentencia SQL (insert) de la linea 230 a la 247, se ejecuta(linea 254) y con lo cual el usuario ha sido dado de alta. Observa como en varios puntos del script voy guardando un log de la ejecucin(errores, querys, etc) en una variable llamada $log puedes imprimirla y detener la ejecucin en cualquier momento para ver que pasadetrs del teln, observa como lo hago yo en la linea 251 y 252.

    Como un plus e puesto el cdigo para que se le puedan enviar sus datos de acceso en un email, si recuerdas ya vimos como enviar unemail en PHP en otra entrada de blog. A continuacin un pantallazo del email que le llega al usuario que se acaba de registrar:

    Despus de enviarle el email con sus datos de acceso, direccionamos al usuario al archivo index.php (recuerda que ahi dio click en elenlace Deseo registrarme) junto con una bandera; $status_registro si esta bandera llega con valor 1 significa que el registro fue exitoso.el archivo index.php ya esta preparado para revisar si le llega esta bandera (fjate en linea 102). Pantalla de aviso que ha sido registrado:

    Por ultimo no hay que olvidarse de cerrar la conexin a la base de datos, esto lo hago en la linea 304 del archivo guardarRegistro.php.

    Demo

    Si deseas ver el ejemplo funcionando Da click aqu, usa estos datos para probar el ejemplo, Usuario: visitante_wp, Contrasea: 12345.Por motivos de seguridad, solo esta habilitado el inicio de sesin, ni la recuperacin de password ni el registro funcionan.

    Bueno, eso es todo, si deseas obtener el cdigo fuente del ejemplo, desde GitHub te los puedes descargar:Descargar ejemplo, hay varios ejemplos, la carpeta se llama autenticar_usuarios.

    Por otra parte, Podras regalarme un like si te gusto el articulo?.

    Hasta pronto,Saludos.

    Etiquetas:autenticacion crifrado mail mysql permisos php privilegios programacion sql usuario

    Acerca de notaspro

  • 15/6/2015 AutenticacindeusuariosenPHPyMySql|NotasdeProgramacin

    http://www.notasprogramacion.com/2014/10/autenticaciondeusuariosenphpymysql/ 21/22

    Fundador de Notas-Programacion.com y amante de las nuevas tecnologias de desarrollo.

    Deja un comentario

    Tu direccin de correo electrnico no ser publicada. Los campos necesarios estn marcados *

    Nombre *

    Correo electrnico *

    Web

    Comentario

    Puedes usar las siguientes etiquetas y atributos HTML:

    Publicar comentario

    Busca un tema

    Buscar en la web Buscar

    Siguenos en redes sociales

    Feed RSS Twitter Facebook Google+ Flickr YouTube

    Lo ltimo que hemos escrito

    Conceptos bsicos de Java & Spring Framework -Entrega IIConceptos bsicos de Java & Spring Framework -Entrega IQu es Spring Framework?Autenticacin de usuarios en PHP y MySqlGeneracin de tokens de seguridad con PHP y validacin en BD MySql

    Regalanos un like!

    Sguenos en Google+!

    NotasdeProgramacin

    10peoplelikeNotasdeProgramacin.

    Facebooksocialplugin

    Like

    NotasdeProgramacin

    Nuevamentebuenastardes,dejoelultimoenlacealarticuloacercadeSpringframework.Lasnotassetitulan:ConceptosbsicosdeJava&SpringFrameworkEntregaII(InterfacesenJava).http://www.notasprogramacion.com//conceptosbasicosdej/Esperolesagrade,saludos.

    SeeTranslation

    November2,2014

    Con

  • 15/6/2015 AutenticacindeusuariosenPHPyMySql|NotasdeProgramacin

    http://www.notasprogramacion.com/2014/10/autenticaciondeusuariosenphpymysql/ 22/22

    Notas de Programacion

    Seguir +1

    Nuestros temas

    acoplamiento AOP autenticacion bienvenida buenas practicas cohesin core Core container crifrado desacoplamiento extends hash html implements ingenierade software inicio interface interfaces java javascript js json lenguaje mail md5 mysql nivel patrn de diseo Dependency Injection patrn de diseo Factory permisos php pojo POJOSPOO privilegios programacion seguridad sha512 spring Spring Core sql token tutorial usuario validacion

    InicioJavaServlets & JSPSpringHibernateStruts 2PHPVolver arriba

    Volverarriba

    Copyright Notas de Programacin