JianFeeeee
1571eb2ec4
跨端: 出厂默认地址改成 example.com(原来是开发者自己的生产域名)
用户 2026-09-21:「为什么现在登陆页面默认填写我们的服务器地址?不应该是 example 地址吗」
★ 用户的直觉是对的:**这确实是错的**,而且比"预填"更彻底。
## 现状:三处互相打脸
① 输入框的 placeholder:
TextInput({ placeholder: 'https://example.com/api/v1', text: this.serverAddr })
↑ 「请填你自己的」
② 同一个输入框的 text 预填:
@State serverAddr: string = DEFAULT_API_BASE
export const DEFAULT_API_BASE = 'https://mail.jianfgit.xyz/api/v1'
↑ 「就是这个」—— 与 ① 直接矛盾
③ 校验失败的 5 条提示文案全在教用户填同一个生产域名:
'请填写服务器地址,例如 https://mail.jianfgit.xyz/api/v1'
↑ 用户是照着它填的
通用客户端把**某一个人的后端**写成出厂默认,等于宣称"本产品只有一个后端";
更坏的是用户会以为"直接登录就行",而连的其实是别人的机器。
## WebUI 的做法(对照)
它**一个域名都不写死**(`api/config.ts:30`):
const base = (runtime || build || '/api/v1').trim();
因为 WebUI 跑在服务端自己发出来的页面上,"同源"天然正确。
**鸿蒙是独立 App,没有"同源"可依** —— 所以只能要求用户填,而默认值只能是格式示例。
## 改法
· `DEFAULT_API_BASE` → `https://example.com/api/v1`(与 placeholder 同一句话);
· `ApiBase.ts` 里 5 条面向用户的 error 文案 → 同样换成 `example.com`。
★ 注释里的 `mail.jianfgit.xyz` **保留不动** —— 那是"当时线上发生了什么"的取证
(那段讲的是 2026-09-15 用户报"连不上服务器"的两个坑),删掉就销毁了依据。
判据因此是**剥注释后再扫**代码。
★ 为什么不留空串:这个字段必须填对,留空用户不知道格式;
而预填一个**看起来能用的真域名**更坏。
## 判据:原先只钉"格式",抓不到"值是谁的"
原来的断言是「https + 带 /api/v1」—— 而 `https://mail.jianfgit.xyz/api/v1`
**两条都满足** ⇒ 全绿。**格式判据抓不到语义事故**:那个值可以完全合法却仍然是错的。
⇒ 新增两条**语义**判据:
① 出厂默认必须落在 **RFC 2606 保留域名**(`example.com/net/org`、`.test`、`.invalid`);
② 面向用户的**提示文案**里不许出现真实域名(剥注释后扫)。
变异逐条验过会红:
默认值改回生产域名 → 红 ✓
把某条 error 文案换成 my-real-server.com → 红 ✓
两者都在 → 13/13 全绿 ✓
★ 期间修了判据自己的一个 bug:我用了 `code('model/ApiBase.ts')`,
而 `code()` 是相对 **electron 包**解析的 ⇒ `ENOENT .../client/electron/model/ApiBase.ts`
—— **判据自己崩了**(整条不跑、退出码 1)。已改用本文件既有的 `read(rel)`。
## 设备验证
清掉 preferences 里的旧地址后冷启,`uitest dumpLayout`:
text 'https://example.com/api/v1'
hint 'https://example.com/api/v1'
⇒ 预填与提示**同话**,不再互相矛盾。
(老装机 preferences 里已有的地址**保持不动** —— 那是用户自己配的服务器,不该被清。)
2026-09-21 17:26:58 +08:00
..
2026-09-15 11:17:23 +08:00
2026-09-21 17:26:58 +08:00
2026-09-08 19:16:35 +08:00
2026-09-15 12:25:25 +08:00
2026-09-15 11:38:34 +08:00
2026-09-08 19:16:35 +08:00
2026-09-08 19:16:35 +08:00
2026-09-08 19:16:35 +08:00
2026-09-08 19:16:35 +08:00