php ./bin/hyperf.php gen:middleware Auth/UserTokenMiddleware
PHP
Copy
<?php
return [
'http' => [
AppMiddlewareAuthUserTokenMiddleware::class
],
];
PHP
Copy
<?php
use HyperfHttpServerRouterRouter;
Router::addGroup('/api', function () {
Router::get('/test/{id}', 'AppControllerIndexController@test');
}, [
['middleware' => [AppMiddlewareAuthUserTokenMiddleware::class]]
]);
PHP
Copy
<?php
namespace AppController;
use HyperfHttpServerAnnotationAutoController;
use HyperfHttpServerAnnotationMiddleware;
use HyperfHttpServerAnnotationMiddlewares;
/**
* @AutoController()
* @Middlewares({
@Middleware(AppMiddlewareAuthUserTokenMiddleware::class)
* })
*/
class IndexController extends AbstractController
{
public function index()
{
$user = $this->request->input('user', 'Hyperf');
$method = $this->request->getMethod();
return [
'method' => $method,
'message' => "Hello {$user}.",
];
}
/**
* @AutoController()
* @Middlewares({
@Middleware(AppMiddlewareAuthAllowedGetMiddleware::class)
* })
*/
public function test(int $id)
{
return $id;
}
}
PHP
Copy
<?php
namespace AppMiddlewareAuth;
use HyperfHttpServerContractRequestInterface as Request;
use HyperfHttpServerContractResponseInterface as Response;
use PsrContainerContainerInterface;
use PsrHttpMessageResponseInterface;
use PsrHttpServerMiddlewareInterface;
use PsrHttpMessageServerRequestInterface;
use PsrHttpServerRequestHandlerInterface;
class UserTokenMiddleware implements MiddlewareInterface
{
/**
* @var ContainerInterface
*/
protected $container;
/**
* @var Response
*/
protected $response;
/**
* @var $request
*/
protected $request;
public function __construct(ContainerInterface $container, Response $response, Request $request)
{
$this->container = $container;
$this->response = $response;
$this->request = $request;
}
public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
{
// token验证
$checkToken = false;
if ($checkToken) { // 验证成功继续往下请求
return $handler->handle($request);
} else { // 验证失败直接返回json内容
return $this->response->json(
[
'code' => -1,
'data' => [
'error' => '中间里验证token无效,阻止继续向下执行',
],
]
);
}
}
}
PHP
Copy