from pydantic import BaseModel, ConfigDict, Field class LoginRequest(BaseModel): """账号密码登录。 `extra="forbid"`:多传字段直接 422,避免调用方以为可以塞 `roles`/`user_id` 之类的越权参数(身份只能由服务端按 RBAC 解析)。 长度上限是防滥用,不是密码策略——真正的校验在 `AuthService`。 """ model_config = ConfigDict(extra="forbid") username: str = Field(min_length=1, max_length=64) password: str = Field(min_length=1, max_length=128)