From 209427f6851aa477eefcc4a9545b1e5d1f6bd41d Mon Sep 17 00:00:00 2001 From: bot_dev2 Date: Thu, 6 Aug 2026 10:31:25 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20seed=5Fiaop=5Fmenus.py=20=E9=80=82?= =?UTF-8?q?=E9=85=8D=20FastAPI>=3D0.13x=EF=BC=88HTTPBasicCredentials=20?= =?UTF-8?q?=E7=BB=91=E5=AE=9A=20query=20=E5=8F=82=E6=95=B0=EF=BC=8C?= =?UTF-8?q?=E7=99=BB=E5=BD=95=E5=B8=A6=20username/password=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- deploy/fba/seed_iaop_menus.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/deploy/fba/seed_iaop_menus.py b/deploy/fba/seed_iaop_menus.py index 4286156..ba610ab 100644 --- a/deploy/fba/seed_iaop_menus.py +++ b/deploy/fba/seed_iaop_menus.py @@ -28,6 +28,7 @@ import getpass import json import sys import urllib.error +import urllib.parse import urllib.request # ---- iAOP 模块注册表(镜像 web/shared/session.js 的 MODULES,顺序即菜单顺序) ---- @@ -61,7 +62,10 @@ class FbaClient: def __init__(self, base: str, username: str, password: str): self.base = base.rstrip("/") cred = base64.b64encode(f"{username}:{password}".encode()).decode() - d = self._req("POST", "/auth/login/swagger", + # 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']})")