JWTAuthApplication2SceneMiddleware.php 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: liyuzhao
  5. * Date: 2019-08-01
  6. * Time: 22:32
  7. */
  8. namespace Phper666\JWTAuth\Middleware;
  9. use Hyperf\HttpServer\Contract\ResponseInterface as HttpResponse;
  10. use Phper666\JWTAuth\Exception\JWTException;
  11. use Phper666\JWTAuth\Util\JWTUtil;
  12. use Psr\Http\Message\ResponseInterface;
  13. use Psr\Http\Message\ServerRequestInterface;
  14. use Psr\Http\Server\MiddlewareInterface;
  15. use Psr\Http\Server\RequestHandlerInterface;
  16. use Phper666\JWTAuth\JWT;
  17. use Phper666\JWTAuth\Exception\TokenValidException;
  18. /**
  19. * jwt token 校验的中间件,校验场景是否一致
  20. * Class JWTAuthApplication2SceneMiddleware
  21. * @package Phper666\JWTAuth\Middleware
  22. */
  23. class JWTAuthApplication2SceneMiddleware implements MiddlewareInterface
  24. {
  25. /**
  26. * @var HttpResponse
  27. */
  28. protected $response;
  29. protected $jwt;
  30. public function __construct(HttpResponse $response, JWT $jwt)
  31. {
  32. $this->response = $response;
  33. $this->jwt = $jwt;
  34. }
  35. /**
  36. * @param ServerRequestInterface $request
  37. * @param RequestHandlerInterface $handler
  38. * @return ResponseInterface
  39. * @throws \Psr\SimpleCache\InvalidArgumentException
  40. * @throws \Throwable
  41. */
  42. public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
  43. {
  44. // 判断是否为noCheckRoute
  45. $path = $request->getUri()->getPath();
  46. $method = $request->getMethod();
  47. if ($this->jwt->matchRoute('application2', $method, $path)) {
  48. return $handler->handle($request);
  49. }
  50. $token = $request->getHeaderLine('Authorization') ?? '';
  51. if ($token == "") {
  52. throw new JWTException('Missing token', 400);
  53. }
  54. $token = JWTUtil::handleToken($token);
  55. if ($token !== false && $this->jwt->verifyTokenAndScene('application2', $token)) {
  56. return $handler->handle($request);
  57. }
  58. throw new TokenValidException('Token authentication does not pass', 400);
  59. }
  60. }