path() === '/api/login') { // return $handler($request); // } // 通过反射获取控制器哪些方法不需要登录 $controller = new ReflectionClass($request->controller); $noNeedLogin = $controller->getDefaultProperties()['noNeedLogin'] ?? []; $isLogin = !in_array($request->action, $noNeedLogin); // 访问的方法需要登录 // if ($isLogin) { // // 拦截请求,返回一个重定向响应,请求停止向洋葱芯穿越 // throw new BusinessException('请先登录', 302); // } // 从 Header 获取 Token $token = $request->header('Authorization'); $language = Util::getParam($request, 'language'); $language = $language=='zh_CN'?:'en'; //需要登录并且未提供token if ($isLogin && (!$token || !str_starts_with($token, 'Bearer '))) { locale($language); return Util::fail('',trans('user_login'),401); // throw new BusinessException('未提供 Token'.$isLogin, 401); }elseif(!$isLogin){ locale($language); return $handler($request); } $token = substr($token, 7); try { // 验证 Token 并获取用户ID $decoded = JwtUtil::verifyToken($token); if (!isset($decoded->sub)) { return Util::fail('', trans('user_login'),401); } $userId = $decoded->sub; if(str_starts_with($userId,'admin_')){ $userId = substr($userId,6); $user = Admin::find($userId); if(!$user){ return Util::fail(['user'=>$user],trans('user_none')); } // $user = $user->toArray(); }else{ $user = User::select(['id','name','sex','role','avatar','email','password','language','created_at']) ->find($userId); if(!$user){ return Util::fail(['user'=>$user],trans('user_none')); } $user = $user->toArray(); locale($user['language']); } // 将用户ID存入请求对象,供后续使用 // $request->user = ['id' => $userId]; $request->user = $user; return $handler($request); } catch (BusinessException $e) { return json(['code' => 401, 'msg' => $e->getMessage()]); } } }