From 83d7fd1badc2d6cff70152cc5d2ab7afda565d17 Mon Sep 17 00:00:00 2001 From: devfzn Date: Fri, 24 Mar 2023 14:15:02 -0300 Subject: [PATCH] ed: conexion, auth.class y respuestas.class MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit conexion.php: Función para encriptar contraseña. auth.class.php: Funcion genera y retorna token y guarda en db. respuestas.class.php: Funcion error_500. --- README.md | 12 ++++- apirest_yt/clases/auth.class.php | 69 +++++++++++++------------ apirest_yt/clases/conexion/conexion.php | 9 ++-- apirest_yt/clases/respuestas.class.php | 10 ++++ 4 files changed, 64 insertions(+), 36 deletions(-) diff --git a/README.md b/README.md index 5626e87..f25a55f 100644 --- a/README.md +++ b/README.md @@ -79,7 +79,7 @@ display_errors = On ---- -### Inicio del proyecto +## Inicio del proyecto Crear y poblar base de datos, según archivo `./original/database/apirest.sql`. @@ -96,3 +96,13 @@ Crear archivo de configuración en la ruta `.//clases/conexion/config` } } ``` + +#### Creación de token + +Combinación de 2 funciones de *php* para generar un *token* único en `/clases/auth.class.php` + +- Función [bin2hex](https://www.php.net/manual/en/function.bin2hex.php) devuelve +un `string` *hexadecimal*. +- Función [openssl_random_pseudo_bytes](https://www.php.net/manual/en/function.openssl-random-pseudo-bytes.php) + + diff --git a/apirest_yt/clases/auth.class.php b/apirest_yt/clases/auth.class.php index d29d97a..c4b1877 100644 --- a/apirest_yt/clases/auth.class.php +++ b/apirest_yt/clases/auth.class.php @@ -3,7 +3,7 @@ require_once 'conexion/conexion.php'; require_once 'respuestas.class.php'; -// auth hereda de conexion (solo metodos publicos) +// auth hereda de conexion (solo metodos public y protected) class auth extends conexion{ public function login($json){ @@ -13,56 +13,61 @@ class auth extends conexion{ // echo "Error parametros auth"; return $_respuestas->error_400(); } else { - // echo "ok"; $usuario = $datos['usuario']; $password = $datos['password']; + $password = parent::encriptar($password); $datos = $this->obtenerDatosUsuario($usuario); if ($datos){ - // Usuario existe - //print_r($datos); + // Verificar contraseña + if ($password == $datos[0]['Password']){ + if ($datos[0]['Estado'] == 'Activo'){ + // Crear token + $verificar = $this->insertarToken($datos[0]['UsuarioId']); + if (!$verificar == 0){ + // Guardado exitoso + $result = $_respuestas->response; + $result["result"] = array("token" => $verificar); + return $result; + } else { + return $_respuestas->error_500("Error al guardar"); + } + } else { + return $_respuestas->error_200("Usuario inactivo"); + } + } else { + return $_respuestas->error_200("Contraseña incorrecta"); + } } else { - // Usuario no existe - //echo "Usuario no existe"; - // return $_respuestas->error_400(); return $_respuestas->error_200("No existe el usuario $usuario"); } } } private function obtenerDatosUsuario($correo){ - $query = "SELECT UsuarioID,Password,Estado FROM usuarios WHERE Usuario = '$correo'"; + $query = "SELECT UsuarioId,Password,Estado FROM usuarios WHERE Usuario = '$correo'"; # Llamado a método de clase padre $datos = parent::obtenerDatos($query); - if(isset($datos[0]["UsuarioID"])){ + if(isset($datos[0]["UsuarioId"])){ return $datos; } else { return 0; } } + private function insertarToken($usuarioid){ + $val = true; + $token = bin2hex(openssl_random_pseudo_bytes(16, $val)); + $date = date("Y-m-d H:i"); + $estado = "Activo"; + $query = "INSERT INTO usuarios_token (UsuarioId, Token, Estado, Fecha) + VALUES('$usuarioid', '$token', '$estado', '$date')"; + $verificar = parent::nonQuery($query); + if ($verificar){ + return $token; + } else { + return 0; + } + } } ?> - - - - - - - - - - - - - - - - - - - - - - - diff --git a/apirest_yt/clases/conexion/conexion.php b/apirest_yt/clases/conexion/conexion.php index 3bf1aca..6d3526f 100644 --- a/apirest_yt/clases/conexion/conexion.php +++ b/apirest_yt/clases/conexion/conexion.php @@ -95,8 +95,11 @@ class conexion { return 0; } } + + // Encriptar password + protected function encriptar($string){ + return md5($string); + } } + ?> - - - diff --git a/apirest_yt/clases/respuestas.class.php b/apirest_yt/clases/respuestas.class.php index b7c2e3b..1bd59ac 100644 --- a/apirest_yt/clases/respuestas.class.php +++ b/apirest_yt/clases/respuestas.class.php @@ -32,6 +32,16 @@ class respuestas{ ); return $this->response; } + + public function error_500($mensaje = "Error interno del servido"){ + $this->response['status'] = "error"; + $this->response['result'] = array( + "error_id" => "500", + "error_msg" => $mensaje + ); + return $this->response; + } + } ?>