19. Registro de Usuarios
Requisitos:
- Servidor Web, PHP (5.5 o superior) y MySQL.
- Librerías: PHPMailer y reCaptcha
- Bootstrap
En la descarga incluimos los formularios con librerías, hojas de estilo, javascripts y archivo sql con la base de datos, la estructura de carpetas es la siguiente:
Para iniciar necesitamos crear una Base de Datos con el nombre login y la siguiente estructura:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
-- -- Base de datos: `login` -- CREATE DATABASE IF NOT EXISTS `login` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; USE `login`; -- -------------------------------------------------------- -- -- Estructura de tabla para la tabla `tipo_usuario` -- CREATE TABLE IF NOT EXISTS `tipo_usuario` ( `id` int(11) NOT NULL, `tipo` varchar(50) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -------------------------------------------------------- -- -- Estructura de tabla para la tabla `usuarios` -- CREATE TABLE IF NOT EXISTS `usuarios` ( `id` int(11) NOT NULL, `usuario` varchar(30) NOT NULL, `password` varchar(130) NOT NULL, `nombre` varchar(100) NOT NULL, `correo` varchar(80) NOT NULL, `last_session` datetime DEFAULT NULL, `activacion` int(11) NOT NULL DEFAULT '0', `token` varchar(40) NOT NULL, `token_password` varchar(100) DEFAULT NULL, `password_request` int(11) DEFAULT '0', `id_tipo` int(11) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -- Indices de la tabla `tipo_usuario` -- ALTER TABLE `tipo_usuario` ADD PRIMARY KEY (`id`); -- -- Indices de la tabla `usuarios` -- ALTER TABLE `usuarios` ADD PRIMARY KEY (`id`); -- -- AUTO_INCREMENT de la tabla `tipo_usuario` -- ALTER TABLE `tipo_usuario` MODIFY `id` int(11) NOT NULL AUTO_INCREMENT; -- -- AUTO_INCREMENT de la tabla `usuarios` -- ALTER TABLE `usuarios` MODIFY `id` int(11) NOT NULL AUTO_INCREMENT; |
Ahora en la carpeta de funcs editamos el script conexion.php con nuestros datos de conexión a MySQL:
1 2 3 4 5 6 7 8 |
<?php $mysqli=new mysqli("localhost","root","password","login"); //servidor, usuario de base de datos, contraseña del usuario, nombre de base de datos if(mysqli_connect_errno()){ echo 'Conexion Fallida : ', mysqli_connect_error(); exit(); } ?> |
También editaremos el script de funcs.php que esta en la carpeta de funcs, en este script solo modificaremos los valores de la función envialEmail() con nuestros datos del correo electrónico desde donde enviaremos los email para activación y recuperación de contraseña (Mas información):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
function enviarEmail($email, $nombre, $asunto, $cuerpo){ require_once 'PHPMailer/PHPMailerAutoload.php'; $mail = new PHPMailer(); $mail->isSMTP(); $mail->SMTPAuth = true; $mail->SMTPSecure = 'tipo de seguridad'; //Modificar $mail->Host = 'dominio'; //Modificar $mail->Port = puerto; //Modificar $mail->Username = 'correo emisor'; //Modificar $mail->Password = 'password de correo emisor'; //Modificar $mail->setFrom('correo emisor', 'nombre de correo emisor'); //Modificar $mail->addAddress($email, $nombre); $mail->Subject = $asunto; $mail->Body = $cuerpo; $mail->IsHTML(true); if($mail->send()) return true; else return false; } |
En el script de registro.php debemos modificar la variable $secret con la clave secreta de nuestro reCaptcha así como el data-sitekey del elemento g-recaptcha del formulario con nuestra clave de reCaptcha.
Al enviar el formulario validara que los campos no estén vacíos, que el usuario y correo electrónico no existan en la base de datos, que el correo electrónico sea valido, que las contraseñas coincidan y que el usuario haya completado el sistema de Captcha, si tiene algún dato mal mostrara los mensajes en la parte inferior del formulario:
Al enviar el formulario y los datos estén correctamente nos enviara un pequeño mensaje:
Al correo electrónico proporcionado se enviara una url para activar nuestra cuenta y poder iniciar sesión, la url llamara al script activa.php y le envía el id de usuario y el token de activación por método get para su validación, el resultado es el siguiente:
El mensaje puede variar dependiendo de las validaciones:
- La cuenta ya se activo anteriormente.
- Cuenta activada.
- Error al Activar Cuenta
- No existe el registro para activar.
Nota: Para la generación de password_hash en necesario tener la versión de PHP 5.5 o superior. En caso de tener problemas con el envío de Correo Electrónico y/o reCaptcha verificar el capítulo 14 y 17 donde se habla del tema.