Advertisement
  1. Code
  2. PHP

Cómo implementar la verificación de correo electrónico para nuevos miembros

by
Read Time:20 minsLanguages:

Spanish (Español) translation by CYC (you can also view the original English article)

¿Alguna vez has creado una cuenta en un sitio web y se te ha pedido que verifiques tu correo electrónico y hagas clic en un enlace de verificación enviado por la empresa para activarlo? Al hacerlo, reduces mucho la cantidad de cuentas de correo no deseado. En esta lección, aprenderemos cómo hacer esto mismo.


¿Qué vamos a construir?

Vamos a construir un buen script de registro de PHP donde un usuario puede crear una cuenta para obtener acceso a una "sección de miembros" de un sitio web.
Después de que el usuario crea su cuenta, la cuenta se bloqueará hasta que el usuario haga clic en un enlace de verificación que recibirá en su casilla de correo electrónico.


Paso 1 - Página de registro

Primero necesitamos una página simple donde nuestros visitantes puedan registrar sus cuentas; así que eso es lo primero que construiremos.
Me gustaría recordarte que este es un tutorial de PHP, y en mi opinión, creo que necesitas conocer los conceptos básicos de HTML antes de continuar con PHP. Agregaré comentarios al HTML y CSS para describir cada línea de código.

index.php: esta es nuestra página de registro con un formulario básico.

css/style.css: esta es la hoja de estilo para index.php y otras páginas.

Como puedes ver, he agregado un comentario a cada línea que describe lo que hacen. Además, es posible que hayas notado el siguiente comentario en el archivo index.php:

¡Vamos a escribir nuestro PHP entre estas 2 líneas!


Paso 2 - Validación del input

Lo primero que vamos a construir es una pieza de código que valide la información. Aquí hay una breve lista que detalla lo que se debe hacer.

  • Si el campo de nombre no está vacío.
  • Si el nombre no es corto.
  • Si el campo de correo electrónico no está vacío.
  • Si la dirección de correo electrónico es válida xxx@xxx.xxx

Entonces, nuestro primer paso es verificar si se envía el formulario y que los campos no están vacíos.

¡Hora de un desglose! Comenzamos con una declaración IF y estamos validando primero el campo de nombre:

Entonces, si envía el formulario ahora con campos vacíos, no pasa nada. Si completas ambos campos, nuestro script ejecutará el código entre paréntesis.
Ahora vamos a crear un código que verificará si una dirección de correo electrónico es válida. Si no es así, devolveremos un error. Además, convirtamos nuestras variables de publicación en variables locales:

Ahora podemos llegar a nuestros datos a través de nuestras variables locales. Como puedes ver, también agregué una cadena de escape MySQL para evitar la inyección de MySQL al insertar los datos en la base de datos MySQL.

"La función mysql_real_escape_string() escapa caracteres especiales en una cadena para usar en una declaración SQL".

Expresiones regulares

El siguiente es un pequeño fragmento que verifica si la dirección de correo electrónico es válida.

Ten en cuenta que personalmente no escribí esta expresión regular, es un pequeño fragmento de php.net.
Básicamente, verifica si el correo electrónico está escrito en el siguiente formato:

Ahora en el eregi, puedes ver que comprueba si el correo electrónico contiene caracteres del alfabeto, si tiene algún número, un guiño fantasma (_) y, por supuesto, los requisitos básicos para un correo electrónico (correo electrónico) '@' y un punto)'.' Si no se encuentra ninguno de estos caracteres, la expresión devuelve "falso". De acuerdo, entonces ahora necesitamos agregar algunos mensajes de error básicos.

Como puedes ver, hemos creado una variable local "$msg", esto nos permite mostrar el error o el mensaje de éxito en cualquier lugar de la página.
Y lo vamos a mostrar entre el texto de instrucción y el formulario.

Agrega esto a style.css, para darle un estilo un poco más a nuestro mensaje de estado.


Paso 3 - Creando la base de datos y estableciendo una conexión

Ahora necesitamos establecer una conexión de base de datos y crear una tabla para insertar los datos de la cuenta. Así que vayamos a PHPMyAdmin y vamos a crear una nueva base de datos llamada registrations y también una cuenta de usuario que tenga acceso a esa base de datos para insertar y actualizar los datos.

Creamos nuestra tabla users, con 5 campos:

Ahora debemos ingresar detalles para estos campos:

Para aquellos que no desean ingresar estos datos manualmente, en su lugar pueden ejecutar el siguiente código SQL.

Nuestra base de datos ha sido creada, ahora necesitamos establecer una conexión usando PHP. Escribiremos el siguiente código al comienzo de nuestro script justo debajo de la siguiente línea:

Utilizaremos el siguiente código para conectarnos al servidor de la base de datos y seleccionar la base de datos registrations. (conexión básica de MySQL)

Ahora que hemos establecido una conexión con nuestra base de datos, podemos pasar al siguiente paso e insertar los detalles de la cuenta.


Paso 4 - Insertar cuenta

Ahora es el momento de ingresar los detalles de la cuenta enviada a nuestra base de datos y generar un hash de activación. Escribe el siguiente código debajo de esta línea:

Hash de activación

En nuestra base de datos creamos un campo llamado hash, este hash es una cadena de texto de 32 caracteres. También enviamos este código a la dirección de correo electrónico del usuario. Luego pueden hacer clic en el enlace (que contiene el hash) y verificaremos si coincide con el de la base de datos. Vamos a crear una variable local llamada $hash y generemos un hash aleatorio md5.

¿Qué hicimos? Bueno, estamos usando la función PHP "rand" para generar un número aleatorio entre 0 y 1000. A continuación, nuestra función MD5 convertirá este número en una cadena de texto de 32 caracteres que utilizaremos en nuestro correo electrónico de activación. Mi elección es usar MD5, porque genera un hash de 32 caracteres que es seguro y, en este caso, imposible de descifrar.

Creando una contraseña aleatoria

Lo siguiente que necesitamos es crear una contraseña aleatoria para nuestro miembro:

Inserta la siguiente información en nuestra base de datos utilizando una consulta MySQL

Como puedes ver, insertamos todos los datos con una cadena de escape MySQL a su alrededor para evitar cualquier inyección de MySQL.
También puedes observar que la función MD5 cambia la contraseña aleatoria en un hash seguro para más protección. Ejemplo: Si una persona "malvada" accede a la base de datos, no puede leer las contraseñas.

Para las pruebas, completa el formulario y verifica si los datos se están insertando en nuestra base de datos.


Paso 5 - Enviar el correo electrónico de verificación

Inmediatamente después de insertar la información en nuestra base de datos, debemos enviar un correo electrónico al usuario con el enlace de verificación. Así que usemos la función "mail" de PHP para hacer exactamente eso.

Ahora desglosemos el mensaje:

En el código anterior enviamos una breve descripción a nuestro usuario que contiene el nombre de usuario y la contraseña, utilizando las variables locales que creamos cuando se publicaron los datos.

En esta sección del código, creamos un enlace dinámico. El resultado de esto se verá así:

Como puedes ver, crea una url sólida, que es imposible de adivinar. Esta es una forma muy segura de verificar la dirección de correo electrónico de un usuario.


Paso 6 - Activación de la cuenta

Como puedes ver, nuestra url enlaza con verify.php así que vamos a crear eso, usando la misma plantilla básica que usamos para index.php.
Sin embargo, elimina el formulario de la plantilla.

Lo primero que debemos hacer es verificar si tenemos nuestras variables $_GET (correo electrónico y hash)

Para hacer las cosas un poco más fáciles, asignemos nuestras variables locales y agreguemos algo de prevención de inyección de MySQL, una vez más, utilizando la cadena de escape de MySQL.

Lo siguiente es verificar los datos de la url contra los datos en nuestra base de datos usando una consulta MySQL.

En el código anterior, usamos una declaración de selección de MySQL y comprobamos que el correo electrónico y el hash coincidían. Pero además de eso, verificamos si el estado de la cuenta es "inactivo". Finalmente, usamos mysql_num_rows para determinar cuántas coincidencias se han encontrado. Así que probemos esto. Simplemente usa un echo para devolver los resultados.

¡Tenemos una COINCIDENCIA! Para cambiar el resultado, simplemente cambia el correo electrónico y verás que el número devuelto es 0.
Podemos usar nuestra variable $match para activar la cuenta o devolver un error cuando no se ha encontrado una coincidencia.

Para activar la cuenta, debemos actualizar el campo activo a 1 usando una consulta MySQL.

Usamos los mismos términos de búsqueda para la actualización que usamos en nuestra consulta de selección de MySQL. Cambiamos activo a 1 donde el correo electrónico, el hash y el campo activo = 0 coinciden. También devolvemos un mensaje que le dice al usuario que su cuenta ha sido activada. Puedes agregar un mensaje como lo hicimos aquí diciendo que: "No se encontró una coincidencia". Por lo tanto, el código final debería ser similar a:

Si visitas verify.php sin ningún tipo de cadenas, se mostrará el siguiente error:


Paso 7 - Iniciar sesión

En este paso final, te mostraré cómo crear un formulario de inicio de sesión básico y verificar si la cuenta está activada. Primero crea un nuevo archivo llamado login.php con la plantilla básica que usamos antes, pero esta vez cambia el formulario a un formulario de inicio de sesión.

El formulario es html básico, y casi el mismo que el formulario de suscripción, no se necesita más explicación. Ahora es el momento de escribir el código para el script de inicio de sesión, que escribiremos justo debajo del código de conexión MySQL. Comenzamos con algo que también hicimos en el formulario de registro.

Primero, verificamos si los datos existen y nos aseguramos de que no estén vacíos.
Lo siguiente es crear algunas variables locales para los datos:

Creamos las variables locales y cambiamos la contraseña en un hash md5 para que coincida con el hash de contraseña que hemos almacenado en la base de datos.
Ahora es el momento de crear la conexión a nuestra tabla "users" y verificar si los datos ingresados son correctos.

Escribimos una consulta de MySQL que seleccionará el nombre de usuario, la contraseña y la información activa de nuestra base de datos para ver si el nombre de usuario y la contraseña coinciden.
Y active='1' es ¡IMPORTANTE! Esto asegura que solo puedes iniciar sesión si tu cuenta está activada. Usamos las filas de números de MySQL nuevamente para ver cuántas coincidencias se encuentran.

En el código anterior verificamos si el inicio de sesión fue exitoso o no.


El fin

¡Y ese es el final de este tutorial! ¡Espero que lo hayas disfrutado, y si lo hiciste por favor deja un comentario a continuación!

  • Síguenos en Twitter, o suscríbete a la fuente RSS de NETTUTS para obtener más artículos diarios y comentarios sobre el desarrollo web.

Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.