静态站 / 单文件 H5 的付费门。一张码绑一台手机:同一台手机随便进,换手机才拦。
规则是「核销即一次性 + 本地存会话」,看起来最安全。实际发生的是:
买家进过一次 → 会话存在浏览器里 → 退出重开 → 碰上一次网络波动 → 前端把本地凭证抹了 → 只好重输同一张码 → 服务端只看到「这张码核销过了」→ 回一句「已经被用过了」。
买家钱付了、码在手上、门进不去,而且没有任何自救路径。
这套规则防不到任何人 —— 你自己在后台一查就知道码有没有被转手; 它唯一稳定做到的事,是把正常买家锁在门外。
| 场景 | 结果 |
|---|---|
| 首次输码 | 放行 · 核销 + 把这串码绑到本机标识上 |
| 同一台手机再来 | 放行 · 长期可反复进入,不报「已用过」 |
| 换一台手机 | 403 · 不放行,也不改动已有绑定 |
| 买家换了手机 | 客服一条命令解绑一次,买家在新手机上输码即改绑 |
| 别家产品的码 | 401 · 拒绝,且不把那张码烧成已用 |
解压后把 kv-access-gate 整个文件夹放进 ~/.workbuddy/skills/,重启对话即可。 之后跟 AI 说一句「用 kv-access-gate 给我这个页面加卡密验证门」就行。
Windows 路径是 C:\Users\<用户名>\.workbuddy\skills\。
想手动跑,四条命令:
node 初始化.js "<工作区>/访问验证系统" node tools/同步产品配置.js node tools/生成卡密.js SJ 1000 node tools/导入卡密到KV.js --product SJ
node tools/接入验证门.js "<你的产品目录>" --out "<部署包目录>" node tools/部署.js "<部署包目录>" <Pages项目名> node tools/验收-设备绑定.js
node assets/tools/自测-设备绑定逻辑.js
68 项断言,覆盖 18 组场景:首次核销 / 同机重进 / 指纹或盐任一命中 / 换机拦截且不篡改绑定 / 会话回访与续签 / 老码收编 / 旧客户端兼容 / 改绑一次 / 产品绑定 / 归一化 / 脏标识 / 限流 / 并发抢码 / 请求方法 / KV 额度耗尽时的异常兜底。
改完服务端函数先跑这个,30 秒知道有没有改坏 —— 不用先部署到线上再拿买家当小白鼠。
| 脚本 | 干什么 |
|---|---|
产品配置.js | 唯一需要手改的文件。产品表、前缀、域名都在这 |
初始化.js | 铺骨架 + 环境自检(Node 版本 / wrangler / 配置 / 凭证) |
同步产品配置.js | 把产品表写进服务端函数。加产品只需改一处 |
生成卡密.js | 出一批码,两份文件:卡券库导入 + KV 导入 |
导入卡密到KV.js | 批量写进 KV,写完抽一张回读确认 |
接入验证门.js | 自动找入口 / 改写 / 插门 / 拷函数 |
升级验证门.js | 门或函数改了,替换已存在的部署包(各保留自己的前缀) |
部署.js | 建项目 + 绑 KV + 设环境变量 + 部署 |
验收-线上五项.js | 接口活着 / 门在 / 核销隔离 / 产品绑定 / 归一化 |
验收-设备绑定.js | 同机重进 / 换机拦截 / 老码收编 / 旧客户端兼容 |
自测-设备绑定逻辑.js | 本地 68 项,不用联网 |
解绑设备.js | 换手机售后。标可改绑 + 作废旧会话 |
清限流.js | 把自己从「尝试次数过多」里放出来 |
_公共.js | 产品表解析 / 凭证 / 云 API / wrangler |
try/catch 里,故障统一回
503 + 一个合法 JSON 错误码,前端才认得出。
配套两条常被忽略:限流写入必须非阻塞(否则额度一耗尽,连「码不存在」这种普通 401 都会变成 500);
前端要能区分「服务端故障」和「网络不通」,别把解析失败悄悄吞掉 —— 那样两种故障就永远分不开了。{"s":0},设备信息是买家首次输码时才写进去的,不是生成时写入 ——
新老码「出生」时完全一样;已核销的老码有收编分支兜着。
真去删码重建是灾难:删除额度同样只有 1000/天,删一半就被拦住;
而且所有已售出的码会全部失效,买过的客户全来找你。<项目名>.pages.dev 不是。
被占时平台会静默给你分配一个带随机后缀的,而原域名打开是别人的站。建完必须读接口返回的真实域名。Authentication error [code:10000] 不等于 token 失效。缺端点权限时也报这个。
判据:拿同一个 token 打一个已知能用的端点做对照。{"s":0},与导入日期无关,因为设备信息是买家首次输码时才写进去的;
已经核销的老码有收编分支自动补绑。真去删码重建,只会让所有已售出的码一起失效 —— 而且删除额度同样只有 1000/天,删一半就被拦住。