# 接续包 —— 注册页验证 + 品牌标识(档案 134/137)收官后 > **状态:✅ 全部完成,无在途任务。** 本会话三条线都已上线、入仓(`971ccc3`)、双推、文档镜像对齐。 > 生成时间:2026-09-19 09:2x|会话:`提交到仓库-品牌标识+注册验证` > 📌 **本文件内不写自身 md5**(写进去就变、自指无效)—— 指纹见下方「指纹登记」与今日日志。 ## 指纹登记 接续包路径:`E:\ProgramData\AI技能\aliyun-dsh-server\接续包_注册页验证_20260919.md` 开工前请重算:`md5sum "E:/ProgramData/AI技能/aliyun-dsh-server/接续包_注册页验证_20260919.md"` ⇒ 不符即**停手报告**「口径已更新,需重新接续」,⛔ 不要按旧口径开工。 --- ## 1. 目标(本会话已完成,供下一棒判断"是否还需动手") 注册账号页增加 **Cloudflare 人机验证** + **邮箱验证码**(含防爆破);并把平台自有页面上所有 **DeepSeek 品牌标识**换成平台标识(中文「能力枢纽」/其他语言「CapabilityNet」)。 ## 2. 已完成(**均已上线 + 入仓 + 双推 + 镜像对齐,无需重做**) | # | 项 | 证据 | |---|---|---| | 1 | 档案 **134** 注册页人机验证 + 邮箱验证码 | DB 迁移 v10;4 个新模块;防爆破(三层配额 + 递增冷却 60→60→180→300→900→1800s + 试错 5 次作废 + 码只存哈希 + 单次使用);Turnstile 校 `success`+`action`+`hostname` **三项** | | 2 | Turnstile **已启用** | 密钥写入 47 `/etc/systemd/system/dshs.service.d/register-verify.conf`(600);线上无 token / 假 token 提交均 **403** | | 3 | 邮件通道 | Brevo,发件域名 `ai1net.com` 已认证(CF 4 条记录 + SPF),发件人 `noreply@ai1net.com`;实测 `delivered` | | 4 | 档案 **137** 品牌标识改造 | 四页(login/register/admin/portal)+ 新建 `web/favicon.svg`;**图标已获用户定稿** | | 5 | 测试 | `test/register-guard.test.mjs`(19) + `test/i18n-brand.test.mjs`(2);全量 **221 pass / 0 fail / 1 skipped** | | 6 | 静态校验加固 | `verify-static.mjs` 新增 SVG 段(XML 注释不得含 ASCII 双连字符——否则整份 SVG 解析失败、图标静默不显示;已做反向自证) | | 7 | 归档与同步 | 档案 134/135/136/137 + INDEX + manifest;提交 **`971ccc3`**;双推原仓与 CNB **三方 sha 一致**;文档镜像 **一致 238 / 不一致 0 / 仅本地 0** | ## 3. 在途 / 未完成 **⏹ 无。本会话没有任何未完成的技术任务。** ## 4. 下一步(**均为"待用户决定",不是待执行**) 1. 🟡 **`users.email` 未进管理端** —— 目前只落 DB,管理员用户列表看不到邮箱。属功能增量,未开工。 2. 🟡 **`index.html` / `wake.html` 没有 favicon link** —— 这两页标签图标为浏览器默认。加一行即可统一。 3. ⚪ **47 上 5 个孤儿用户目录**(`3ec95f69…`/`4eaeb26b…`/`74e8804a…`/`7ba268be…`/`ca3f36e0…`,09-15 产生、DB 无对应行)+ 仓库根三个历史临时目录(`_tmp_seq24/`、`_tmp_seq40/`、`_中间产物_待清理/`)—— 均**未动**,清理需用户点头(不可逆)。 4. ✅ **已按用户拍板办完**:文档镜像已同步(47 文件)|图标定稿采用|三个零引用 DeepSeek 资产(`logo.svg`/`deepseek-text.svg`/`deepseek.webp`)**保留不删**。 ## 5. 关键决定(⛔ 不要重开讨论) - **邮件用 Brevo**,驱动**可插拔**(`brevo`/`http`/`log`)⇒ 换供应商只改 env、零代码。 - **限流计数落 DB**(`email_codes` 事件表),⛔ 不落进程内(本部署天天重启,进程内计数清零 = 关掉限流)。 - **三条顺序不变式**:先人机验证再花配额 / 被拒绝也落库 / 上游成功才记 `sent`。 - **配置默认全空** ⇒「不配任何 env = 与改造前逐字一致」;功能启用 = 策略要求 ∧ 通道配齐。 - **Turnstile 必须校 `hostname`**(sitekey 公开 ⇒ 只校 `success` 时"拿我们的 sitekey 在自己站点替真人取合法 token 再打我们接口"这条路是通的)。 - **品牌名走 i18n 词条**(`brand.name`),只写 `en` 一条即覆盖所有其他语言的回退。 - 🔴 **会话页面(实例内官方 dsh 界面)的标识不动** —— 用户明示「先不替换」,且它属官方 client bundle、受 **R2** 约束。 ## 6. 回滚点 | 对象 | 方式 | |---|---| | 静态页 / 图标 | `/opt/dsh/backups/rebrand-20260919-084220/pre.tar`(第一批)+ `/opt/dsh/backups/rebrand2-20260919-090205/pre.tar`(本批)→ 覆盖 `/opt/dshs/`,**tar 即生效、无需重启** | | 后端产物(`lib/**`) | `/opt/dsh/backups/register-verify-20260919_070418/{pre.tar,pre2.tar,pre3-turnstile.tar}` → 覆盖 + `restart dshs` | | env(含密钥) | `/etc/systemd/system/dshs.service.d/register-verify.conf.bak-turnstile-20260919-083853`(= 只有邮件通道、无 Turnstile 的上一版) | | 文档镜像 | `/opt/dsh/backups/docs-sync-20260919-091840/pre.tar`(本次 47 文件)|**根本回滚依据 = 本机 git 仓库**(已全量提交 `971ccc3`) | | 只停功能(首选) | `mv register-verify.conf{,.off} && systemctl daemon-reload && systemctl restart dshs` ⇒ 注册恢复成"用户名+密码" | ## 7. 若开新会话:开机四步 1. 跑 `E:/ProgramData/AI技能/aliyun-dsh-server/state.py`(**第 0 步**,先看锁 / git / 在途单)。 2. 读本文件(先 `md5sum` 校验上方指纹,不符即停)。 3. 读档案 `D:/github/dsh_shenxian/dsh-server-docs/04-调整方案/134-……md` 与 `137-……md`(**细节的唯一来源**)。 4. 抢全局执行锁:`bash "D:/github/dsh_shenxian/dsh-server-docs/scripts/handoff-guard.sh" --claim-exec "<会话名>"`。 ⛔ 本任务**无待执行项** ⇒ 新会话开工前请先判断"是否真有事要做",无事则直接报告并释放锁。