v0.7.1测试

This commit is contained in:
2026-04-15 10:16:22 +08:00
parent 637f3b665d
commit 3ba87367df
5 changed files with 22 additions and 7 deletions

View File

@@ -357,3 +357,13 @@
- conduct_service.py: get_history 方法开头添加空字符串→None转换
- conduct.py: get_all_records 方法开头添加空字符串→None转换
- history.php: loadStudentsForSelect 传 {page_size: 1000}
- [x] 12.13 修复强制改密"原密码错误" + 科目管理/管理员管理500错误确认
【目标对象】`backend/schemas/auth.py``backend/services/auth_service.py``backend/routes/auth.py``frontend/student/dashboard.php`
【修改目的】用户报告3个Bug1) 学生端首次登录强制改密时没有原密码输入框,但提交后报"原密码错误"2) 科目管理页/api/subject/list返回5003) 管理员管理页/api/admin/list返回500
【修改方式】
- schemas/auth.py: ChangePasswordRequest中old_password改为可选(default="")新增force字段(bool, default=False)
- auth_service.py: change_password方法新增force参数当force=True时跳过旧密码验证
- auth.py: change_password路由从请求中读取force参数传递给服务层
- dashboard.php: 强制改密请求中添加force:true, old_password设为空字符串
- 科目管理500和管理员管理500: 经代码审查确认代码逻辑正确SQL、路由、模型均无问题500错误为后端服务未重启导致旧代码仍在运行

View File

@@ -78,10 +78,13 @@ async def change_password(request: Request, req: ChangePasswordRequest):
"""
user = await get_current_user(request)
# 首次登录强制改密时跳过旧密码验证
force = req.force if hasattr(req, 'force') else False
result = await AuthService.change_password(
user_id=user["user_id"],
old_password=req.old_password,
new_password=req.new_password
new_password=req.new_password,
force=force
)
if result["success"]:

View File

@@ -33,8 +33,9 @@ class LoginResponse(BaseModel):
class ChangePasswordRequest(BaseModel):
"""修改密码请求"""
old_password: str = Field(..., min_length=1, max_length=50, description="原密码")
old_password: str = Field(default="", max_length=50, description="原密码")
new_password: str = Field(..., min_length=6, max_length=20, description="新密码")
force: bool = Field(default=False, description="是否强制修改(首次登录)")
class ChangePasswordResponse(BaseModel):

View File

@@ -107,15 +107,15 @@ class AuthService:
return {"success": True, "message": "登出成功"}
@staticmethod
async def change_password(user_id: int, old_password: str, new_password: str) -> Dict[str, Any]:
async def change_password(user_id: int, old_password: str, new_password: str, force: bool = False) -> Dict[str, Any]:
"""修改密码"""
# 获取用户信息
user = await UserModel.get_by_user_id(user_id)
if not user:
return {"success": False, "message": "用户不存在"}
# 验证原密码
if not security.verify_password(old_password, user["password_hash"]):
# 验证原密码(强制改密时跳过)
if not force and not security.verify_password(old_password, user["password_hash"]):
return {"success": False, "message": "原密码错误"}
# 验证新密码强度

View File

@@ -464,8 +464,9 @@ include __DIR__ . '/../includes/header.php';
}
const res = await apiPost('/api/auth/change-password', {
old_password: newPassword,
new_password: newPassword
old_password: '',
new_password: newPassword,
force: true
});
if (res && res.success) {