JWTMiddleware.php 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. <?php
  2. namespace App\Http\Middleware;
  3. use Closure;
  4. use Illuminate\Http\Request;
  5. use Illuminate\Support\Carbon;
  6. use Illuminate\Support\Facades\DB;
  7. use Firebase\JWT\JWT;
  8. use Firebase\JWT\Key;
  9. use App\Http\Controllers\ResponseController;
  10. use Exception;
  11. class JWTMiddleware{
  12. private $responseController;
  13. private $publicKey = "zOgD0uF22+xg37nTmA+bg/6/E80BJYeHeByGpeTrNFw=";
  14. /**
  15. * Handle an incoming request.
  16. *
  17. * @param \Illuminate\Http\Request $request
  18. * @param \Closure(\Illuminate\Http\Request): (\Illuminate\Http\Response|\Illuminate\Http\RedirectResponse) $next
  19. * @return \Illuminate\Http\Response|\Illuminate\Http\RedirectResponse
  20. */
  21. public function __construct(){
  22. $this->responseController = new ResponseController();
  23. }
  24. public function handle(Request $request, Closure $next){
  25. $token = $request->bearerToken();
  26. if(is_null($token)){
  27. return $this->responseController->makeResponse(true, "No se encontró el token de autorización.", [], 401);
  28. }
  29. try{
  30. $decoded = JWT::decode($token, new Key($this->publicKey, 'EdDSA'));
  31. }catch(Exception $e){
  32. return $this->responseController->makeResponse(true, "Token inválido.", [], 401);
  33. }
  34. $usr = DB::table('S002V01TUSUA')->where('USUA_COEL', '=', $decoded->iss)->first();
  35. if(is_null($usr)){
  36. return $this->responseController->makeResponse(true, "El usuario que generó el token no está registrado en la base.", [], 401);
  37. }else if($usr->USUA_ESTA == 'Inactivo'){
  38. return $this->responseController->makeResponse(true, "El usuario que generó el token está desactivado.", [], 401);
  39. }else if($usr->USUA_ESTA == 'Eliminado'){
  40. return $this->responseController->makeResponse(true, "El usuario que generó el token está eliminado.", [], 401);
  41. }
  42. if($decoded->aud != "dominio.syp.mx"){
  43. return $this->responseController->makeResponse(true, "El token no fue generado en este sistema.", [], 401);
  44. }
  45. $now = Carbon::now('America/Mexico_city')->timestamp;
  46. if($now > $decoded->cad){
  47. return $this->responseController->makeResponse(true, "Token expirado.", [], 401);
  48. }
  49. return $next($request);
  50. }
  51. }