You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

67 lines
2.6 KiB

<?php
namespace App\Http\Controllers;
use App\Constants\HttpStatus;
use Firebase\JWT\JWT;
use Illuminate\Http\Request;
/**
* Controlador de autenticación para generar y gestionar tokens JWT.
*
* Este controlador maneja las peticiones de autenticación, verificando una
* clave s<ecreta proporcionada y generando un token JWT con un tiempo de
* expiración. El token puede ser utilizado para autorizar solicitudes futuras.
*
* Métodos disponibles:
* - login: Valida la clave secreta y genera un token JWT.
*/
class AuthController extends Controller
{
/**
* Método para autenticar la petición y generar un token JWT.
*
* Este método valida si se ha proporcionado la clave secreta, verifica su
* validez comparándola con la configurada en el archivo .env y genera un
* token JWT con un tiempo de expiración de 15 minutos. Devuelve el token
* y la información de expiración en formato JSON.
*
* @param Request $request La solicitud HTTP que contiene la clave secreta.
* @return \Illuminate\Http\JsonResponse Respuesta JSON con el token JWT o mensajes de error.
*/
public function login(Request $request)
{
// Verifica que la clave secreta esté presente en el cuerpo de la solicitud POST
if (! $request->has('clave_secreta')) {
return response()->json(['message' => trans('api.SIN_CLAVE')], HttpStatus::BAD_REQUEST);
}
// Verificar la clave secreta proporcionada en los datos POST
$claveSecreta = $request->input('clave_secreta');
if ($claveSecreta !== config('app.clave')) {
return response()->json(['message' => trans('api.CLAVE_INCORRECTA')], HttpStatus::UNAUTHORIZED);
}
$expirationTime = time() + (15 * 60); // 15 minutos
// Datos que quieres incluir en el JWT
$payload = [
'iss' => 'tu-dominio.com', // Issuer del token
'iat' => time(), // Hora en que se creó el token
'exp' => $expirationTime, // Expiración de 15 minutos
'clave_secreta' => $claveSecreta, // Datos personalizados en el token
];
// Generar el token JWT usando la clave secreta desde el .env
$jwt = JWT::encode($payload, config('app.jwt_secret'), 'HS256');
return response()->json([
'token' => $jwt,
'expiracion_segundos' => $expirationTime - time(), // Tiempo en segundos hasta la expiración
'tiempo_expiracion' => date('Y-m-d H:i:s', $expirationTime), // Fecha y hora de expiración
]);
}
}