refactor(auth): 统一登录=账号密码+手机号验证码, 微信扫码预留(本期未开放)

- auth/status 返回 login_modes([password,phone]) + wechat_login 标志, 供各端渲染(VITE 按此显示)
- wx-login 用 config.AUTH_WECHAT_LOGIN(默认 false) 闸门, 未开放返回 503'微信登录预留中'
- 本期所有端口两种登录模式; 微信扫码后期拓展
This commit is contained in:
Pine
2026-08-25 16:25:50 +08:00
parent 0039a809ac
commit a976ce194e
3 changed files with 11 additions and 3 deletions
+7 -3
View File
@@ -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:
+2
View File
@@ -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
+2
View File
@@ -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: