feat(server,web,shared,desktop): 上传超限正确报错 + 两个登录入口都限流 + 作业按天深链,文档与验证脚本同步
服务端加固: - express.json 上限 2mb → 12mb:表格导入把文件以 base64 放进 JSON(约 4/3 倍), 8MB 的声明上限原先到 1.5MB 就被拦掉;超限现在由 error 中间件映射成 413 IMPORT_TOO_LARGE(中文提示"请拆分后分批导入"),不再落进 500 兜底分支抛英文原文; - loginRateLimiter 同时挂 /auth/login 与 /auth/class-login(班级密码默认 123456, 班级登录曾是唯一没有暴力破解防护的入口),两个路径共享同一计数器; - CORS_ORIGIN=* 时启动告警(不拦截启动,避免挡住教室机 file:// 的合法部署); - 删除已无用的 DEFAULT_STUDENT_PASSWORD;班级 termWeeks 上限 40 → 30, 与 MAX_TERM_WEEK / weekNumberSchema 对齐(原先对外承诺了系统兑现不了的学期长度)。 Web 端: - 作业页 ?date= 深链在同路由再推 query 时也生效(watch route.query.date); - 表格导入对话框适配 8MB 上限与 413 提示。 冒烟与文档: - 新增 scripts/lib/smoke-class.mjs:验证用临时班级,避免探针通知弹到用户自己的客户端与灵动岛; - README 与 AGENTS.md 同步本轮全部行为变更(含 schedule source、学生账号清理、凭据门禁)。
This commit is contained in:
1 parent
3880eee08e
commit
20fcca0388
28 files changed
+1649
-915
No files matched your search
@@ -86,10 +86,10 @@ async function main(): Promise<void> {
|
||||
const random = createRandom(20260901);
|
||||
|
||||
// 同一角色共用密码,只需各哈希一次
|
||||
const [adminHash, teacherHash, studentHash, classPasswordHash] = await Promise.all([
|
||||
// 学生没有密码:个人学生账号已清理(2026-10-01),学生端统一用班级码 + 班级密码登录
|
||||
const [adminHash, teacherHash, classPasswordHash] = await Promise.all([
|
||||
hashPassword('admin123'),
|
||||
hashPassword('teacher123'),
|
||||
hashPassword('student123'),
|
||||
// 班级账号默认密码(学生端「班级登录」)
|
||||
hashPassword('123456'),
|
||||
]);
|
||||
@@ -142,7 +142,8 @@ async function main(): Promise<void> {
|
||||
name: STUDENT_NAMES[index] ?? `学生${index + 1}`,
|
||||
role: 'STUDENT',
|
||||
classId: targetClass.id,
|
||||
passwordHash: studentHash,
|
||||
// 空串占位:User.passwordHash 必填,但学生登录的 403 判定在密码校验之前,永远用不到
|
||||
passwordHash: '',
|
||||
},
|
||||
});
|
||||
students.push(student);
|
||||
@@ -376,10 +377,8 @@ async function main(): Promise<void> {
|
||||
console.log(`管理员 admin / admin123 (${admin.name})`);
|
||||
console.log(`教师 teacher1 / teacher123 (${teacher1.name} · 高一(1)班、高二(3)班)`);
|
||||
console.log(`教师 teacher2 / teacher123 (${teacher2.name} · 高一(2)班、高二(3)班协作)`);
|
||||
console.log('学生 student01 / student123 (高一(1)班)');
|
||||
console.log('学生 student06 / student123 (高一(2)班)');
|
||||
console.log('学生 student11 / student123 (高二(3)班)');
|
||||
console.log('学生 student15 / student123 (高二(3)班)');
|
||||
console.log('学生端(班级账号):G101 / G102 / G203,密码 123456');
|
||||
console.log('(学生只有名单、没有个人账号,成绩/未交/叫人按名单记录)');
|
||||
console.log('==========================================\n');
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user