diff --git a/app/api/routers/auth.py b/app/api/routers/auth.py index 3363b49..7508057 100644 --- a/app/api/routers/auth.py +++ b/app/api/routers/auth.py @@ -261,10 +261,12 @@ async def register(req: RegisterRequest, request: Request, db: Database = Depend @router.get("/status", response_model=AuthStatusResponse, summary="认证状态") async def auth_status(db: Database = Depends(get_db)): - """前端登录页据此判断是否展示登录表单。""" + """前端登录页据此判断是否展示登录表单。本期登录模式:账号密码 + 手机号验证码;微信扫码预留(未开放)。""" return AuthStatusResponse( enabled=config.AUTH_ENABLED, has_users=await db.users.has_users(), + login_modes=["password", "phone"] + (["wechat"] if config.AUTH_WECHAT_LOGIN else []), + wechat_login=config.AUTH_WECHAT_LOGIN, ) @@ -453,9 +455,11 @@ async def phone_login(req: PhoneLoginRequest, request: Request, db: Database = D return await _login_response(db, user, identity) -@router.post("/wx-login", response_model=LoginResponse, summary="微信登录") +@router.post("/wx-login", response_model=LoginResponse, summary="微信扫码登录(预留)") async def wx_login(req: WxLoginRequest, request: Request, db: Database = Depends(get_db)): - """微信 code 登录:未配置 appid 时直通(code 当 openid),便于联调。""" + """微信扫码登录:本期预留未开放。开启需 PINEAGENTS_WECHAT_LOGIN=true 且配置 appid/secret。""" + if not config.AUTH_WECHAT_LOGIN: + raise HTTPException(status_code=503, detail="微信登录预留中,本期未开放") if not config.AUTH_ENABLED: raise HTTPException(status_code=403, detail="认证未开启") try: diff --git a/app/api/schemas/auth.py b/app/api/schemas/auth.py index 5572041..8e88360 100644 --- a/app/api/schemas/auth.py +++ b/app/api/schemas/auth.py @@ -54,6 +54,8 @@ class RevokeTokenRequest(BaseModel): class AuthStatusResponse(BaseModel): enabled: bool has_users: bool + login_modes: list[str] = ["password", "phone"] # 本期:账号密码 + 手机号验证码;微信扫码预留 + wechat_login: bool = False # 微信扫码(预留,本期未开放) class VerifyResponse(BaseModel): valid: bool diff --git a/app/config.py b/app/config.py index 038d35b..142cfdd 100644 --- a/app/config.py +++ b/app/config.py @@ -134,6 +134,8 @@ SMS_RATE_LIMIT = int(os.environ.get("PINEAGENTS_SMS_RATE_LIMIT", "5")) # --------------------------------------------------------------------------- WECHAT_APPID = os.environ.get("PINEAGENTS_WECHAT_APPID", "") WECHAT_SECRET = os.environ.get("PINEAGENTS_WECHAT_SECRET", "") +# 本期统一登录仅两模式(账号密码/手机号验证码);微信扫码预留后期,未开放(默认 False)。 +AUTH_WECHAT_LOGIN = os.environ.get("PINEAGENTS_WECHAT_LOGIN", "false").strip().lower() in ("true", "1", "yes") def resolve_token_expiry(expires_in: int | None) -> int: