服务端加固: - 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、学生账号清理、凭据门禁)。
61 lines
2.2 KiB
Bash
61 lines
2.2 KiB
Bash
# ---------------------------------------------------------------------------
|
||
# 班级小助手 - 后端服务环境变量
|
||
# 复制为 .env 后按需修改:cp .env.example .env
|
||
# ---------------------------------------------------------------------------
|
||
|
||
# 运行环境:development | test | production
|
||
NODE_ENV=development
|
||
|
||
# HTTP / WebSocket 监听端口
|
||
PORT=4000
|
||
|
||
# 数据库类型:sqlite | mysql
|
||
# 说明:sqlite 用于本地开发;mysql 用于云端统一存储(见 docs/mysql.md)
|
||
DATABASE_PROVIDER=sqlite
|
||
|
||
# SQLite:相对路径以 packages/server 为基准
|
||
DATABASE_URL="file:./prisma/dev.db"
|
||
# MySQL 示例(切换时替换上面一行,并执行 pnpm db:switch:mysql):
|
||
# DATABASE_URL="mysql://classhelper:your-password@127.0.0.1:3306/classhelper"
|
||
|
||
# JWT 签名密钥:必须修改,建议 `node -e "console.log(require('crypto').randomBytes(48).toString('hex'))"`
|
||
JWT_SECRET=change-me-to-a-random-48-bytes-hex-string
|
||
# JWT 有效期,例如 7d / 12h
|
||
JWT_EXPIRES_IN=7d
|
||
|
||
# 允许跨域的来源,多个用英文逗号分隔;* 表示全部允许(开发环境)
|
||
CORS_ORIGIN=*
|
||
|
||
# bcrypt 加密强度
|
||
BCRYPT_ROUNDS=10
|
||
|
||
# 教师新增学生账号时未指定密码所使用的初始密码
|
||
|
||
# 学期配置:第 1 教学周的周一日期(YYYY-MM-DD),用于“当前周次”换算
|
||
TERM_START_DATE=2026-02-23
|
||
|
||
# 日志级别:debug | info | warn | error
|
||
LOG_LEVEL=info
|
||
|
||
# ---------------------------------------------------------------------------
|
||
# 生产部署相关(本地开发保持默认即可)
|
||
# ---------------------------------------------------------------------------
|
||
|
||
# 监听地址:本地开发用 127.0.0.1;服务器/容器用 0.0.0.0
|
||
HOST=0.0.0.0
|
||
|
||
# 反向代理层数:使用 Nginx / 云负载均衡时填 1,用于正确识别客户端 IP(限流依赖)
|
||
TRUST_PROXY=false
|
||
|
||
# Web 管理端构建产物目录;留空则自动探测 packages/web-admin/dist 或 ./web
|
||
WEB_DIST_DIR=
|
||
|
||
# 接口限流开关(压测时可临时置 false)
|
||
RATE_LIMIT_ENABLED=true
|
||
|
||
# 启动时校验数据库连通性(生产建议 true:连不上直接启动失败,避免带病对外服务)
|
||
STARTUP_DB_CHECK=true
|
||
|
||
# 数据库为空时自动执行迁移(SQLite 场景;安装程序首次启动用)
|
||
AUTO_MIGRATE=false
|