UPDATE API

Funcionalidad del api con variable de sesión valida por 1 hora
This commit is contained in:
2025-05-12 15:12:14 -06:00
parent 485e249dab
commit f9f23fd8b8
2 changed files with 29 additions and 9 deletions

1
.env
View File

@@ -12,6 +12,7 @@ RECAPTCHA_SECRET=6LfkMB8rAAAAAFWMAZmIqtN0ocDzg9t1g0_xbkkN
SMTP_PASS=N036p7y! SMTP_PASS=N036p7y!
API_URL=http://50.21.176.205:3000 API_URL=http://50.21.176.205:3000
API_USER=adminAS API_USER=adminAS
API_PASS=zC?K.Z5o2tiLN4gE API_PASS=zC?K.Z5o2tiLN4gE

View File

@@ -13,18 +13,32 @@ loadEnv();
/** /**
* Obtiene (y cachea en sesión) el JWT de la API usando las credenciales de $_ENV * 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 function getApiToken(): ?string
{ {
if (!empty($_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']; return $_SESSION['api_token'];
} }
error_log("[getApiToken] Token expirado (edad: {$age}s), obteniendo uno nuevo");
}
// 2) Sí o sí hacemos login en la API
$url = rtrim($_ENV['API_URL'] ?? '', '/') . '/auth/login'; $url = rtrim($_ENV['API_URL'] ?? '', '/') . '/auth/login';
$user = $_ENV['API_USER'] ?? ''; $user = $_ENV['API_USER'] ?? '';
$pass = $_ENV['API_PASS'] ?? ''; $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); $ch = curl_init($url);
curl_setopt_array($ch, [ curl_setopt_array($ch, [
@@ -38,16 +52,21 @@ function getApiToken(): ?string
$http = curl_getinfo($ch, CURLINFO_HTTP_CODE); $http = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch); 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'])) { if ($http === 200 && ($data = json_decode($resp, true)) && !empty($data['token'])) {
// 3) Guardamos token y tiempo actual
$_SESSION['api_token'] = $data['token']; $_SESSION['api_token'] = $data['token'];
$_SESSION['api_token_time'] = time();
return $data['token']; return $data['token'];
} }
// 4) Si no se pudo obtener, devolvemos null
error_log('[getApiToken] No se pudo obtener token de la API');
return null; return null;
} }
/** /**
* GET /IMPORTADORES/proveedores * GET /IMPORTADORES/proveedores
* Muestra la vista de listado * Muestra la vista de listado
@@ -150,7 +169,7 @@ function eliminar()
$ch = curl_init($url); $ch = curl_init($url);
curl_setopt_array($ch, [ curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'DELETE', CURLOPT_CUSTOMREQUEST => 'DELETE',
CURLOPT_HTTPHEADER => ["Authorization: Bearer $token",'Accept: application/json'], CURLOPT_HTTPHEADER => ["Authorization: $token",'Accept: application/json'],
CURLOPT_RETURNTRANSFER => true, CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 5, CURLOPT_TIMEOUT => 5,
]); ]);