Cómo hacer una autorización en html. Creando un sistema simple de registro de usuarios en PHP y MySQL

Les traigo un script muy simple y funcional para registrarse y autorizar en el sitio, que consta de 3 archivos PHP con la conexión de 2 scripts java, con la ayuda del cual se muestran los errores en el formulario sin recargar la página.

El script ha sido probado con éxito en PHP 5.3.3 y PHP 5.6.3.

Qué puede hacer y tiene el guión

  • Registrar nuevos usuarios;
  • Autorizar a los usuarios y registrar cookies durante un período determinado (no es necesario iniciar sesión cada vez);
  • Mostrar y ocultar cierta información para usuarios autorizados y no autorizados, respectivamente;
  • Tiene un PANEL DE ADMINISTRACIÓN donde puedes editar todos los datos y eliminar usuarios.

Los paneles DEMO y de administración también están ahí

PASO 1.
Si utiliza el script de autorización y registro local usando DENWER, no necesita realizar cambios en los archivos para conectarse a la base de datos.
De lo contrario, abra los archivos: Stayt.php, Classes/Auth.class.php y adminka/connect.php, y en la parte superior reemplace los datos para conectarse a la base de datos con los suyos.

PASO 2.
Vaya (si usa DENWER) a la dirección: http://localhost/Tools/phpmyadmin/, si está en hosting, luego haga clic en Bases de datos y cree una nueva base de datos con el nombre: registr y comparación: utf8_general_ci.
Por supuesto, puede configurar su nombre, pero luego asegúrese de reemplazarlo en los archivos para conectarse a la base de datos (consulte el paso 1).

PASO 3.
Haga clic en la base de datos de registro creada y luego en la pestaña SQL superior y en la ventana de entrada que aparece, pegue este código y haga clic en Aceptar.

CREAR TABLA SI NO EXISTE `mis_usuarios` (`id` int(11) NOT NULL AUTO_INCREMENT, `nombre de usuario` varchar(255) NOT NULL, `names` varchar(15) NOT NULL, `contraseña` varchar(255) NOT NULL, `salt` varchar(100) NO NULO, CLAVE PRIMARIA (`id`)) MOTOR=MyISAM DEFAULT CHARSET=utf8;

¡Todo! Vaya a su dirección en el navegador, pruebe y experimente.

Panel de administración

Después de haber completado al menos un registro, puede ir a la sección ADMIN.
Inicie sesión en el PANEL DE ADMINISTRACIÓN:

Http://your_site.ru/adminka/

No olvide proteger esta carpeta y también puede cambiarle el nombre.
Cuando abra el Panel de administración, haga clic en el botón BUSCAR y se mostrarán todos los usuarios registrados, donde cuando haga clic en un número de identificación específico, verá los datos del usuario para editar.

También puede encontrar rápidamente un usuario por su correo electrónico; para ello, simplemente ingrese un correo electrónico conocido en el campo BUSCAR y haga clic en el botón.
No recomiendo usar el botón AGREGAR, ya que el usuario se agrega al sistema sin contraseña. Y no tengo idea de por qué lo hicieron.

Eso es todo, si no funciona o no queda claro, haz preguntas.


Al mismo tiempo, puedes intentar vender información (productos).

Reg.ru: dominios y hosting

El mayor registrador y proveedor de alojamiento de Rusia.

Más de 2 millones de nombres de dominio en servicio.

Promoción, correo de dominio, soluciones empresariales.

Más de 700.000 clientes en todo el mundo ya han elegido.

*Pase el mouse sobre para pausar el desplazamiento.

Atrás Adelante

Creando un sistema simple de registro de usuarios en PHP y MySQL

Crear un sistema de registro es mucho trabajo. Debe escribir un código que valide las direcciones de correo electrónico, envíe un correo electrónico confirmando el registro y también valide otros campos del formulario y mucho más.

E incluso después de escribir todo esto, los usuarios se mostrarán reacios a registrarse, porque... esto requiere algo de esfuerzo de su parte.

En este tutorial, crearemos un sistema de registro muy simple que no requiere ni almacena contraseñas. El resultado será fácil de modificar y agregar a un sitio PHP existente. ¿Quieres saber cómo funciona? Lea a continuación.



Así es como funcionará nuestro sistema súper simple:

Combinaremos el formulario de autorización y el registro. Este formulario tendrá un campo para ingresar su dirección de correo electrónico y un botón de registro;
- Al completar el campo con una dirección de correo electrónico, al hacer clic en el botón de registro se creará un registro sobre un nuevo usuario, pero solo si la dirección de correo electrónico ingresada no se encontró en la base de datos.

Después de esto, se crea un conjunto único aleatorio de caracteres (token), que se envía al correo electrónico especificado por el usuario en forma de enlace que será relevante durante 10 minutos;
- El enlace lleva al usuario a nuestro sitio web. El sistema determina la presencia de un token y autoriza al usuario;

Ventajas de este enfoque:

No es necesario almacenar contraseñas ni validar campos;
- No es necesario recuperar tu contraseña, preguntas de seguridad, etc.;
- Desde el momento en que un usuario se registra/inicia sesión, siempre puedes estar seguro de que este usuario estará en tu zona de acceso (que la dirección de correo electrónico es verdadera);
- Proceso de registro increíblemente sencillo;

Defectos:

Seguridad de la cuenta de usuario. Si alguien tiene acceso al correo del usuario, puede iniciar sesión.
- El correo electrónico no es seguro y puede ser interceptado. Tenga en cuenta que esta pregunta también es relevante en el caso de que la contraseña se haya olvidado y sea necesario restaurarla, o en cualquier sistema de autorización que no utilice HTTPS para la transferencia de datos (inicio de sesión/contraseña);
- Si bien configuras tu servidor de correo correctamente, existe la posibilidad de que los mensajes con enlaces de autorización terminen en spam;

Comparando las ventajas y desventajas de nuestro sistema, podemos decir que el sistema tiene una alta usabilidad (máxima comodidad para el usuario final) y, al mismo tiempo, tiene un indicador de seguridad bajo.

Por lo que se sugiere utilizarlo para registros en foros y servicios que no funcionan con información importante.

Cómo utilizar este sistema

En caso de que sólo necesite utilizar un sistema para autorizar a los usuarios en su sitio y no quiera desmenuzar esta lección, esto es lo que debe hacer:

Necesitas descargar las fuentes adjuntas a la lección.
- Busque el archivo table.sql en el archivo. Importelo a su base de datos usando la opción de importación en phpMyAdmin. Forma alternativa: abra este archivo a través de un editor de texto, copie la consulta SQL y ejecútela;
- Abra include/main.php y complete la configuración para conectarse con su base de datos (especifique el usuario y la contraseña para conectarse con la base de datos, así como el host y el nombre de la base de datos). En el mismo archivo también deberá especificar el correo electrónico, que se utilizará como dirección original para los mensajes enviados por el sistema. Algunos servidores bloquean los correos electrónicos salientes a menos que el formulario contenga una dirección de correo electrónico real, que fue creada desde el panel de control del servidor, así que proporcione una dirección real;
- Cargue todos los archivos y activos index.php, protected.php e incluye carpetas a través de FTP a su host;
- Agregue el siguiente código a cada página PHP donde desee mostrar el formulario de inicio de sesión;

Require_once "incluye/main.php"; $usuario = nuevo Usuario(); if(!$usuario->loggedIn())( redirigir("index.php"); )
- ¡Listo!

Para aquellos que estén interesados ​​en cómo funciona todo, ¡sigan leyendo a continuación!

El primer paso es escribir el código HTM del formulario de autorización. Este código se encuentra en el archivo index.php. Este archivo también contiene código PHP que maneja datos de formularios y otras funciones útiles del sistema de inicio de sesión. Puede obtener más información sobre esto en la siguiente sección dedicada a la revisión del código PHP.

index.php

Tutorial: Sistema de registro súper simple con PHP y MySQL Iniciar sesión o registrarse

Introduzca su dirección de correo electrónico arriba y le enviaremos
usted un enlace de inicio de sesión.

Iniciar sesión/Registrarse

En la sección principal (entre las etiquetas y) incluí los estilos principales (no se tratan en este tutorial, por lo que puedes verlos tú mismo. Carpeta activos/css/style.css). Antes de la etiqueta de cierre, incluí la biblioteca jQuery y el archivo script.js, que escribiremos y analizaremos a continuación.


javascript

jQuery rastrea el estado del botón "Registrarse/Iniciar sesión" usando la función e.preventDefault() y envía solicitudes AJAX. Dependiendo de la respuesta del servidor, muestra uno u otro mensaje y determina acciones adicionales/

activos/js/script.js

$(función())( var form = $("#login-register"); form.on("enviar", función(e)( if(form.is(".loading, .loggedIn"))( return falso; ) var correo electrónico = form.find("input").val(), messageHolder = form.find("span"); $.post(this.action, (correo electrónico: correo electrónico), función (m)( if (m.error)( form.addClass("error"); messageHolder.text(m.message); ) else( form.removeClass("error").addClass("loggedIn"); messageHolder.text(m.message ) )); $(documento).ajaxStart(función())( formulario.addClass("cargando"); )); $(documento).ajaxComplete(función())( formulario. removeClass("cargando") ;

se agregó al formulario para mostrar el estado actual de la solicitud AJAX (esto fue posible gracias a los métodos ajaxInicio()) Y ajaxCompleto(), que puede encontrar hacia el final del archivo).

Esta clase muestra un archivo gif animado giratorio (como para indicarnos que la solicitud se está procesando) y también actúa como una bandera para evitar que el formulario se envíe nuevamente (cuando ya se ha hecho clic una vez en el botón de registro). La clase .loggedIn es otro indicador: se establece cuando se envió el correo electrónico. Esta bandera bloquea inmediatamente cualquier acción adicional con el formulario.

Esquema de base de datos

Nuestro sistema de registro increíblemente simple utiliza 2 tablas MySQL (el código SQL está en el archivo table.sql). El primero almacena datos sobre cuentas de usuario. El segundo almacena información sobre la cantidad de intentos de inicio de sesión.


Esquema de la tabla de usuarios.

El sistema no utiliza contraseñas, como se puede observar en el diagrama. En él puede ver la columna de tokens con tokens adyacentes a la columna token_validity. El token se instala tan pronto como el usuario se conecta al sistema y configura su correo electrónico para enviar un mensaje (más sobre esto en el siguiente bloque). La columna token_validity establece la hora 10 minutos después, después de la cual el token ya no es válido.


Esquema de tabla que cuenta el número de intentos de autorización.

En ambas tablas, la dirección IP se almacena en forma procesada, utilizando la función ip2long en un campo de tipo entero.

Ahora podemos escribir algo de código PHP. La funcionalidad principal del sistema está asignada a la clase User.class.php, que puedes ver a continuación.

Esta clase utiliza activamente idorm (docs), estas bibliotecas son las herramientas mínimas necesarias para trabajar con bases de datos. Maneja el acceso a la base de datos, la generación de tokens y la validación de tokens. Proporciona una interfaz sencilla que facilita la conexión de un sistema de registro a su sitio si utiliza PHP.

Usuario.clase.php

Usuario de clase( // ORM privado caso privado $orm; /** * Encuentre un usuario por token. Solo se aceptan tokens válidos para su consideración. El token se genera solo durante 10 minutos desde el momento en que se creó * @param string $token Este es el token que estamos buscando * @return Usuario. Devuelve el valor de la función Usuario */ función estática pública findByToken($token)( // busca el token en la base de datos y asegúrate de que esté configurada la marca de tiempo correcta $. resultado = ORM::for_table("reg_users") ->where ("token", $token) ->where_raw("token_validity > NOW()") ->find_one(); if(!$resultado)( return false; ) return new User($resultado) /** *); Autorizar o registrar un usuario * @param string $email dirección de correo electrónico del usuario * @return User */ public static function loginOrRegister($email)( // Si tal usuario ya existe, devuelve el valor de la función Usuario de la dirección de correo electrónico especificada almacenada en la base de datos if(User::exists($email))( return new User($email); ) // De lo contrario, crea un nuevo usuario en el base de datos y devolver el valor de la función User::create del correo electrónico especificado return User::create($email);

Los tokens se generan utilizando el algoritmo SHA1 y se almacenan en la base de datos. Estoy usando las funciones de sincronización de MySQL para establecer un límite de tiempo de 10 minutos para la validez de un token.

Cuando se valida un token, le decimos directamente al controlador que solo estamos considerando los tokens que aún no han caducado, almacenados en la columna token_validity.

Tenga en cuenta que estoy usando el método mágico. __conseguir biblioteca docs al final del archivo para interceptar el acceso a las propiedades del objeto Usuario.

Gracias a esto, es posible acceder a la información almacenada en la base de datos, gracias a las propiedades $usuario->email, $usuario->token, etc. En el siguiente fragmento de código, veremos cómo utilizar estas clases como ejemplo.


Página protegida

Otro archivo que almacena funcionalidades útiles y necesarias es el archivo funciones.php. Existen varios llamados ayudantes: funciones de asistente que le permiten crear código más limpio y legible en otros archivos.

funciones.php

Función send_email($from, $to, $subject, $message)( // Ayudante que envía correo electrónico $headers = "MIME-Version: 1.0" . "\r\n"; $headers .= "Tipo de contenido: texto /plain; charset=utf-8" . "\r\n"; $encabezados .= "De: ".$de . "\r\n"; return mail($a, $asunto, $mensaje, $encabezados ); ) function get_page_url())( // Determinar la URL del archivo PHP $url = "http".(empty($_SERVER["HTTPS"])?"":"s")."://" .$_SERVER ["SERVER_NAME"]; if(isset($_SERVER["REQUEST_URI"]) && $_SERVER["REQUEST_URI"] != "")( $url.= $_SERVER["REQUEST_URI"]; ) else( $url. = $_SERVER["PATH_INFO"]; ) return $url; function rate_limit($ip, $limit_hour = 20, $limit_10_min = 10)( // Número de intentos de inicio de sesión en la última hora para esta dirección IP $count_hour = ORM: :for_table("reg_login_attempt") ->where("ip", sprintf("%u", ip2long($ip))) ->where_raw("ts > SUBTIME(NOW(),"1:00" )") ->count(); // Número de intentos de inicio de sesión en los últimos 10 minutos para esta dirección IP $count_10_min = ORM::for_table("reg_login_attempt") ->where("ip", sprintf("%u" , ip2long($ ip))) ->where_raw("ts > SUBTIME(NOW(),"0:10")") ->count();

if($count_hour > $limit_hour || $count_10_min > $limit_10_min)( throw new Exception("¡Demasiados intentos de inicio de sesión!"); ) ) function rate_limit_tick($ip, $email)( // Crea un nuevo registro en la tabla eso cuenta el número de intentos de inicio de sesión $login_attempt = ORM::for_table("reg_login_attempt")->create(); $login_attempt->email = $login_attempt->ip = sprintf("%u", ip2long($ip; )); $login_attempt->save(); función redirigir($url)( encabezado("Ubicación: $url"); salir; ) Funciones límite_tasa Y tasa_limit_tick

monitorear el número de intentos de autorización durante el período de tiempo transcurrido desde el primer intento. El intento de inicio de sesión se registra en la base de datos en la columna reg_login_attempt. Estas funciones se llaman cuando los datos del formulario se procesan y envían, como puede ver en el siguiente fragmento de código.

index.php

Try( if(!empty($_POST) && isset($_SERVER["HTTP_X_REQUESTED_WITH"]))( // Genera un encabezado JSON header("Content-type: application/json"); // ¿Esta dirección de correo electrónico es válida si (!isset($_POST["email"]) || !filter_var($_POST["email"], FILTER_VALIDATE_EMAIL))( throw new Exception("Ingrese un correo electrónico válido."); ) // Comprobar. usuario autorizado a iniciar sesión, ¿ha excedido el número de conexiones permitidas? (archivo funciones.php para más información) rate_limit($_SERVER["REMOTE_ADDR"] // Registra este intento de autorización rate_limit_tick($_SERVER["REMOTE_ADDR"] , $ _POST["email"]); // Enviar un correo electrónico al usuario $message = ""; $email = $_POST["email"] $subject = "Su enlace de inicio de sesión" ( $subject = "; ¡Gracias por registrarte!"; $message = "¡Gracias por registrarte en nuestro sitio!\n\n"; ) // Intentando autorizar o registrar a un usuario $user = User::loginOrRegister($_POST[ "email"] ); $message.= "Puedes iniciar sesión desde esta URL:\n";

$mensaje.= get_page_url()."?tkn=".$usuario->generateToken()."\n\n"; $message.= "El enlace caducará automáticamente después de 10 minutos.";$resultado = send_email($fromEmail, $_POST["email"], $asunto, $mensaje);

index.php

if(!$result)( throw new Exception("Hubo un error al enviar su correo electrónico. Inténtelo de nuevo."); ) die(json_encode(array("message" => "¡Gracias! Hemos enviado un enlace a su bandeja de entrada también revise su carpeta de correo no deseado."))); ) ) catch(Exception $e)( die(json_encode(array("error"=>1, "message" => $e->getMessage(). )));

Después de iniciar sesión/registrarse exitosamente, el código anterior enviará al usuario un enlace de inicio de sesión. El token está disponible porque se pasa como una variable en el enlace generado por el método

$_GET

con marcador tkn

index.php

If(isset($_GET["tkn"]))( // ¿Este token es válido para autorización? $user = User::findByToken($_GET["tkn"]); if($user)( // Sí, es. Redirigir a la página protegida $user->login(); redirigir("protected.php"); // No, el token no es válido. ).

Al final del código, nuevamente configuré una redirección a index.php, por lo que el parámetro ?cerrar sesión=1 no es necesario transmitir a través de URL.

Nuestro archivo index.php requiere archivos adicionales. protección: no queremos que las personas que han iniciado sesión en el sistema vuelvan a ver el formulario de registro. Para estos fines utilizamos el método $usuario->loggedIn().

index.php

$usuario = nuevo Usuario(); if($usuario->loggedIn())( redirigir("protected.php"); )

Finalmente, aquí hay un fragmento de código que le permite proteger las páginas de su sitio y hacerlas accesibles solo después de la autorización.

protegido.php

// Para proteger cada página de su sitio, incluya un archivo main.php // y cree un nuevo objeto Usuario. ¡Así de fácil es! require_once "incluye/main.php"; $usuario = nuevo Usuario(); if(!$usuario->loggedIn())( redirigir("index.php"); )

Después de esta verificación, puede estar seguro de que el usuario fue autorizado exitosamente. También puede acceder a la información almacenada en la base de datos utilizando las propiedades del objeto. $usuario. Para mostrar el correo electrónico y el estado del usuario, utilice este código:

Haga eco de "Su correo electrónico: ".$usuario->correo electrónico; echo "Tu rango: ".$usuario->rank();

Método rango() se utiliza aquí porque la base de datos generalmente almacena números (0 para un usuario normal, 1 para un administrador) y necesitamos convertir estos datos en los estados a los que se relacionan, que es con lo que nos ayuda este método.

Para convertir a un usuario normal en administrador, simplemente edite la entrada del usuario a través de phpMyAdmin (o cualquier otro programa que le permita administrar bases de datos). El estado de administrador no otorga ningún privilegio; en este ejemplo, la página mostrará que usted es administrador, y eso es todo.

Pero qué hacer con esto queda a su discreción; usted mismo puede escribir y redactar código que establezca ciertos privilegios y capacidades para los administradores.

¡Hemos terminado!

¡Hemos terminado con esta forma increíblemente súper casi simple! Puedes usarlo en tus sitios PHP, es bastante simple. También puedes modificarlo tú mismo y hacerlo como quieras.

El material fue preparado por Denis Malyshok específicamente para el sitio web.

PD ¿Quieres avanzar más en el dominio de PHP y POO? Preste atención a las lecciones premium sobre diversos aspectos de la creación de sitios web, incluida la programación en PHP, así como a un curso gratuito sobre cómo crear su propio sistema CMS en PHP desde cero usando programación orientada a objetos:

¿Te gustó el material y quieres agradecerme?
¡Simplemente comparte con tus amigos y colegas!


La función de registrar y autorizar usuarios en el sitio se implementa de la siguiente manera: cuando un usuario se registra en el sitio, completa un formulario de registro en el que indica varios datos, incluido el nombre de usuario y la contraseña. El formulario envía estos datos al servidor y se escribe en la base de datos.

  • El usuario ingresa el nombre de usuario y la contraseña en el formulario de autorización y lo envía al servidor.
  • El servidor comprueba si hay un usuario en la base de datos con el mismo nombre de usuario y contraseña.
  • Si se encuentra al usuario, la información al respecto se registra en una sesión o cookie.
  • En las páginas del sitio se comprueba si la sesión contiene datos de que el usuario está autorizado y, dependiendo de ello, la página se muestra de una forma u otra.
  • En la sesión, no solo puede indicar el hecho de la autorización, sino también registrar algunos datos del usuario para mostrarlos en la página, por ejemplo, un nombre o apodo. La decisión sobre si utilizar sesiones o cookies se toma sitio por sitio. Si el sitio contiene información importante, es mejor utilizar sesiones, porque es mucho más difícil encontrar los datos de registro de otra persona.

    Formularios de autorización y registro

    El formulario de autorización generalmente se encuentra en la página principal o puede estar en todas las páginas del sitio. Básicamente, se crea una página separada para el formulario de registro. Crearemos una sola página, que contendrá ambos formularios, y en ella se mostrarán los datos del usuario. Por ahora sólo contendrá código HTML, pero inmediatamente crearemos un archivo PHP, porque en el futuro será un script. Llamémoslo formreg.php. El código de la página será así:

    formularioreg.php:

    Registro

    Registraremos los datos de registro de usuarios en la tabla de usuarios. Si aún no tiene una tabla de este tipo, créela. Debe contener los campos id, login y pas. No utilizaremos otros campos. Si están en la tabla, permanecerán vacíos.

    registro.php:

    Escriba su contraseña: Repita la contraseña ingresada:

    Probablemente hayas notado que hay variables PHP en el código HTML. Son el contenido de los atributos de los campos de texto de los formularios, el contenido de los contenedores diseñados para mostrar errores. Pero no hemos inicializado estas variables. Hagamos esto.

    Registro de usuario Introduce tu login: Registro de usuario Introduce tu login:

     Arriba