Harness 与 Koa2 登录实践(三):脚本验收、安全边界与「可交接」
配套开源仓库:harness-login-now-koa2
系列(一)讲契约与意图,(二)讲分步实现与 curl;(三)收束到 自动化验收、安全与运维边界、以及 新会话如何接手——对应分步指南阶段 6~7 与HARNESS-SELF-CHECK.md。
这篇在讲什么
手写 curl 能验收,但人容易懒、环境容易忘。Harness 里很看重最后一步:用固定命令证明「管道末端形态」——在本仓库里就是 npm run verify。
同时,登录系统若只实现功能、不写清密钥与多实例边界,很容易在「上生产」或「换人维护」时踩雷。这一篇用通俗说法把这些写进 README 与摘录文档里的约定串起来。
npm run verify:从「我觉得行」到「脚本绿」
通俗目标:另一台机器、另一个终端,只要 npm start + npm run verify,就能走通:
注册 → 登录 → GET /me → 登出 → 再访问 /me 应 401
实现上,仓库提供 scripts/verify-flow.sh(bash),package.json 里配置了 npm run verify。脚本用 curl 与临时 cookie 文件串整条链路;失败时 非零退出,方便 CI 或本地一眼判断。
非默认端口时设置 BASE_URL(例如 http://127.0.0.1:4000)。Windows 可用 scripts/verify-flow.ps1 或 Git Bash 跑同名 shell——避免「只有 Mac 能验」。
这就是 Harness 八要素里的:系统如何验证真的把事做好了——和契约里写的状态码、JSON 形状对齐后,改版 API 先改契约再改脚本,漂移成本可控。
安全边界:不只靠「自觉不打日志」
仓库在实现与文档里反复强调几件事(细节以代码与 implement guide/GLOBAL-CONTEXT-README-EXTRACT.md 为准):
| 主题 | 通俗说明 |
|---|---|
| 密码 | 响应里没有明文;开发日志对 password 脱敏;磁盘只有 passwordHash |
| 会话密钥 | 生产务必配置 SESSION_KEYS;占位密钥不能当真;.env 勿提交(.gitignore 已忽略) |
| Cookie | httpOnly 降低被 JS 偷走的面;属性与契约一致 |
| CORS | 第一版偏保守:依赖浏览器同源配合 Cookie;若前后端分离,应对白名单单独设计 credentials |
| 多实例 | 勿多进程/多容器同时写同一 data/users.json,会互相覆盖;要上规模需换存储与并发模型 |
本仓库未内置 dotenv,环境变量需在 shell / 部署平台自行注入——这也是「环境即契约」的一部分:不假设运行环境里 magically 有一份 .env。
HARNESS-SELF-CHECK.md:八要素一行对照
写完功能后,很容易只剩「代码即文档」。HARNESS-SELF-CHECK.md 用八条短句说明:在本登录系统里,任务表达、上下文组织、工具治理、状态与裁剪、反馈、错误分类、安全边界、验证分别落在哪些文件或机制上。
用途是:熵管理——过三个月你自己或 Agent 再看仓库,仍能快速对齐「当初为什么这样设计」。你也可以在 Cursor 里让模型根据当前 README 与契约重新生成一版对照,与文件 diff 着看。
交接与延伸:CONTEXT 与 README 摘录
若你习惯用 AI 接力开发,仓库还准备了 implement guide/V1/CONTEXT-V1-LLM-HANDOFF.md(实现快照、源码职责)与 GLOBAL-CONTEXT-README-EXTRACT.md(运维向摘录)。新开 Task 时先 @ 这些文件,比从零描述仓库状态稳得多。
延伸(非本仓库义务):接真实数据库、Redis Session、限流、单测替代/补充 verify、.env.example 等——若继续用同一套 Harness 节奏,建议仍遵循:先更新契约与分步文档,再改代码。
小结
- verify 脚本把验收从手工变成可复现命令,是 Harness 里「验证」的落点。
- SESSION_KEYS、日志脱敏、CORS、users.json 单写 把安全与运维边界说清楚,减少「上线才想起来」的惊喜。
- 自检表 + 交接文档 让项目在一段时间后仍可读、可交给他人或 Agent。
系列回顾与仓库
- (一) Harness 与登录练习的关系:先契约、再实现。
- (二) 从
/health到 注册 / 登录 //me的递进与小步 curl。 - (三)
npm run verify、安全与运维边界、文档化自检与交接。
完整代码、契约、分步指南、验收脚本与自检表均在此仓库,建议 clone 后按 README 跑通一遍:
若本文对你有用,欢迎在掘金点赞收藏,并把仓库链接分享给同样需要「契约先行 + 可复现验收」的同学——仓库持续以学习与工程化实验为主,也欢迎 Issue 与 PR 交流。