JWTMiddleware.php 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  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. }
  38. if($decoded->aud != "dominio.syp.mx"){
  39. return $this->responseController->makeResponse(true, "El token no fue generado en este sistema.", [], 401);
  40. }
  41. $now = Carbon::now('America/Mexico_city')->timestamp;
  42. if($now > $decoded->cad){
  43. return $this->responseController->makeResponse(true, "Token expirado.", [], 401);
  44. }
  45. return $next($request);
  46. }
  47. }