From f9f23fd8b824e2b7b6d440fb1af067e8d3eb46db Mon Sep 17 00:00:00 2001 From: ernestohc21 Date: Mon, 12 May 2025 15:12:14 -0600 Subject: [PATCH] UPDATE API MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Funcionalidad del api con variable de sesión valida por 1 hora --- .env | 1 + app/controllers/proveedores.php | 37 +++++++++++++++++++++++++-------- 2 files changed, 29 insertions(+), 9 deletions(-) diff --git a/.env b/.env index 410ea17..3783a33 100644 --- a/.env +++ b/.env @@ -12,6 +12,7 @@ RECAPTCHA_SECRET=6LfkMB8rAAAAAFWMAZmIqtN0ocDzg9t1g0_xbkkN SMTP_PASS=N036p7y! + API_URL=http://50.21.176.205:3000 API_USER=adminAS API_PASS=zC?K.Z5o2tiLN4gE diff --git a/app/controllers/proveedores.php b/app/controllers/proveedores.php index f88309c..b54b7da 100644 --- a/app/controllers/proveedores.php +++ b/app/controllers/proveedores.php @@ -13,18 +13,32 @@ loadEnv(); /** * Obtiene (y cachea en sesión) el JWT de la API usando las credenciales de $_ENV */ +/** + * Obtiene (y cachea) el JWT de la API usando credenciales de $_ENV + * Gestiona expiración: asume 1 hora de vida y renueva si ha pasado. + */ function getApiToken(): ?string { - if (!empty($_SESSION['api_token'])) { - return $_SESSION['api_token']; + // Duración en segundos del token (60 min) + $ttl = 3600; + + // 1) Si ya tenemos token y no ha expirado, lo devolvemos + if (!empty($_SESSION['api_token']) && !empty($_SESSION['api_token_time'])) { + $age = time() - $_SESSION['api_token_time']; + if ($age < $ttl) { + error_log("[getApiToken] Usando token en caché (edad: {$age}s)"); + return $_SESSION['api_token']; + } + error_log("[getApiToken] Token expirado (edad: {$age}s), obteniendo uno nuevo"); } - $url = rtrim($_ENV['API_URL'] ?? '', '/') . '/auth/login'; + // 2) Sí o sí hacemos login en la API + $url = rtrim($_ENV['API_URL'] ?? '', '/') . '/auth/login'; $user = $_ENV['API_USER'] ?? ''; $pass = $_ENV['API_PASS'] ?? ''; - $body = json_encode(['username'=>$user,'password'=>$pass]); + $body = json_encode(['username' => $user, 'password' => $pass]); - error_log("[getApiToken] POST $url → body: $body"); + error_log("[getApiToken] POST $url → $body"); $ch = curl_init($url); curl_setopt_array($ch, [ @@ -38,16 +52,21 @@ function getApiToken(): ?string $http = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); - error_log("[getApiToken] HTTP $http → resp: $resp"); + error_log("[getApiToken] HTTP $http → $resp"); if ($http === 200 && ($data = json_decode($resp, true)) && !empty($data['token'])) { - $_SESSION['api_token'] = $data['token']; + // 3) Guardamos token y tiempo actual + $_SESSION['api_token'] = $data['token']; + $_SESSION['api_token_time'] = time(); return $data['token']; } + // 4) Si no se pudo obtener, devolvemos null + error_log('[getApiToken] No se pudo obtener token de la API'); return null; } + /** * GET /IMPORTADORES/proveedores * Muestra la vista de listado @@ -96,7 +115,7 @@ function ajax_lista() // 4) Ejecutamos cURL $ch = curl_init($url); curl_setopt_array($ch, [ - CURLOPT_HTTPHEADER => ["Authorization: $token", 'Accept: application/json'], + CURLOPT_HTTPHEADER => ["Authorization: $token", 'Accept: application/json'], CURLOPT_RETURNTRANSFER => true, CURLOPT_TIMEOUT => 5, ]); @@ -150,7 +169,7 @@ function eliminar() $ch = curl_init($url); curl_setopt_array($ch, [ CURLOPT_CUSTOMREQUEST => 'DELETE', - CURLOPT_HTTPHEADER => ["Authorization: Bearer $token",'Accept: application/json'], + CURLOPT_HTTPHEADER => ["Authorization: $token",'Accept: application/json'], CURLOPT_RETURNTRANSFER => true, CURLOPT_TIMEOUT => 5, ]);