<?php namespace app\middleware; use Tinywan\Jwt\Exception\JwtTokenException; use Tinywan\Jwt\JwtToken; use Webman\Http\Request; use Webman\Http\Response; use Webman\MiddlewareInterface; class AdminAuthCheck implements MiddlewareInterface { public function process(Request $request, callable $handler): Response { try { // 跳过不需要验证的控制器方法 $controller = new \ReflectionClass($request->controller); $notNeedLogin = $controller->getDefaultProperties()['notNeedLogin'] ?? []; if (in_array($request->action, $notNeedLogin)) { return $handler($request); } $token = $request->header('Authorization'); if (!$token) { throw new JwtTokenException('请先登录~', 500); } if (strpos($token, 'Bearer') === 0) { $token = trim(substr($token, 6)); } JwtToken::verify(1, $token); $request->adminId = JwtToken::getCurrentId(); $request->adminJwtInfo = JwtToken::getExtend(); return $handler($request); } catch (JwtTokenException $e) { return json_fail($e->getMessage()); } } }