From 4a7b5e4f219393130546d72581bd877fc4f3a856 Mon Sep 17 00:00:00 2001 From: bot_dev2 Date: Thu, 6 Aug 2026 10:32:21 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20seed=5Fiaop=5Fmenus.py=20swagger=20?= =?UTF-8?q?=E7=99=BB=E5=BD=95=E8=BF=94=E5=9B=9E=E8=A3=B8=20GetSwaggerToken?= =?UTF-8?q?=EF=BC=88=E6=97=A0=20code=20=E5=8C=85=E8=A3=85=EF=BC=89?= =?UTF-8?q?=EF=BC=8C=E4=B8=93=E7=94=A8=E7=99=BB=E5=BD=95=E6=96=B9=E6=B3=95?= =?UTF-8?q?=E9=80=82=E9=85=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- deploy/fba/seed_iaop_menus.py | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/deploy/fba/seed_iaop_menus.py b/deploy/fba/seed_iaop_menus.py index ba610ab..57e382c 100644 --- a/deploy/fba/seed_iaop_menus.py +++ b/deploy/fba/seed_iaop_menus.py @@ -65,10 +65,21 @@ class FbaClient: # FastAPI >= 0.13x 将 HTTPBasicCredentials 绑定到 query 参数, # 登录需带 ?username=&password=(Basic 头仍保留,双通道兼容)。 q = urllib.parse.urlencode({"username": username, "password": password}) - d = self._req("POST", f"/auth/login/swagger?{q}", - headers={"Authorization": f"Basic {cred}"}) - self.token = d["data"]["access_token"] - print(f"[ok] 登录成功:{username}({d['data']['user']['username']})") + # 注意:/auth/login/swagger 返回裸 GetSwaggerToken(无 {code,msg} 包装), + # 不能走 _req 的通用 code==200 校验。 + req = urllib.request.Request( + f"{self.base}/auth/login/swagger?{q}", + headers={"Content-Type": "application/json", + "Authorization": f"Basic {cred}"}, + method="POST") + try: + with urllib.request.urlopen(req, timeout=15) as r: + d = json.loads(r.read().decode()) + except urllib.error.HTTPError as e: + detail = e.read().decode(errors="replace")[:300] + raise SystemExit(f"[fail] POST /auth/login/swagger → HTTP {e.code}: {detail}") + self.token = d["access_token"] + print(f"[ok] 登录成功:{username}({d['user']['username']})") def _req(self, method: str, path: str, body=None, headers=None): h = {"Content-Type": "application/json"}