* @link https://github.com/gzydong/hyperf-chat */ namespace App\Middleware; use Phper666\JWTAuth\JWT; use Hyperf\Di\Annotation\Inject; use Psr\Container\ContainerInterface; use Psr\Http\Message\ResponseInterface; use Psr\Http\Server\MiddlewareInterface; use Psr\Http\Message\ServerRequestInterface; use Psr\Http\Server\RequestHandlerInterface; /** * WebSocket token 授权验证中间件 * * @package App\Middleware */ class WebSocketAuthMiddleware implements MiddlewareInterface { /** * @var ContainerInterface */ protected $container; /** * @inject * @var JWT */ private $jwt; public function __construct(ContainerInterface $container) { $this->container = $container; } public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface { // 授权验证拦截握手请求并实现权限检查 $token = $request->getQueryParams()['token'] ?? ''; try { $this->jwt->checkToken($token); } catch (\Exception $e) { return $this->container->get(\Hyperf\HttpServer\Contract\ResponseInterface::class)->raw('Forbidden'); } return $handler->handle($request); } }