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.
65 lines
2.4 KiB
65 lines
2.4 KiB
<?php |
|
|
|
namespace App\Http\Controllers; |
|
|
|
use Illuminate\Http\Request; |
|
use Firebase\JWT\JWT; |
|
|
|
use App\Constants\HttpStatus; |
|
|
|
/** |
|
* Controlador de autenticación para generar y gestionar tokens JWT. |
|
* |
|
* Este controlador maneja las peticiones de autenticación, verificando una |
|
* clave secreta 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. |
|
* |
|
* @package App\Http\Controllers |
|
*/ |
|
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) |
|
{ |
|
if(!$request->has('clave_secreta')){ |
|
return response()->json(['message' => trans('api.SIN_CLAVE')], HttpStatus::BAD_REQUEST); |
|
} |
|
|
|
// Verificar la clave secreta |
|
if ($request->clave_secreta !== config('app.clave')) { |
|
return response()->json(['message' => trans('api.CLAVE_INCORRECTA')], HttpStatus::UNAUTHORIZED); |
|
} |
|
|
|
$expirationTime = time() + (15 * 60); // 15 minuto |
|
|
|
// Datos que quieres incluir en el JWT (puedes personalizarlo) |
|
$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' => $request->clave_secreta // 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 |
|
]); |
|
} |
|
}
|
|
|