controller); /** * apidoc 直接继续向洋葱芯穿越 */ if($controller->name=='hg\apidoc\Controller'){ return $handler($request); } $noNeedLogin = $controller->getDefaultProperties()['noNeedLogin'] ?? []; if (in_array($request->action, $noNeedLogin)) { // 不需要登录的方法继续向洋葱芯穿越 return $handler($request); } // 获取 Authorization 头部中的 token,通常格式为 "Bearer " $token = $request->header('Authorization') ?? ''; // 检查 token 是否为空 if (empty($token)) { return ApiResponse::error(401, ['error' => '缺少令牌'], '未授权'); } // 移除 Bearer 前缀并获取纯 token // if (strpos($token, 'Bearer ') === 0) { // $token = substr($token, 7); // 去掉 "Bearer " 部分 // } try { // 解码 token,返回用户信息 $decoded = JwtToken::getExtend($token); // var_dump($decoded); } catch (\Exception $e) { // 解码失败,返回无效令牌错误 return ApiResponse::error(401, ['error' => '无效的令牌'], '未授权'); } // 将解码后的用户信息存储到请求对象的 user 属性中 // $request = $request->withAttribute('user', $decoded); $request->data = $decoded; // 继续处理请求,传递给下一个中间件或控制器,并返回响应 return $handler($request); } }