跨端: fix(推送客户端) 更正我上一笔的注释:session_id 不是"只写不读",GET 会回给客户端

上一笔 `9404f98` 的代码是对的,但注释里我写了一句**过度概括**:

    "服务端对这个字段不做格式校验、而且当前**只写不读**"

后半句错了。`GET /api/v1/me/devices/push-token` 把这个字段**原样回给客户端**:

    server/internal/handler/push.go:148    "session_id":  t.SessionID,

更正为准确的三条(各自都能复核):

1. 服务端不做格式校验(只 `TrimSpace`、允许为空)⇒ 所以不 400、不影响收信、不进日志;
2. 但 GET 会回给客户端 ⇒ 假值**是可见的**,且 `isRegistered` 的比对口径
   (只按 `provider + token_tail`,见 PushContract.ts 那段说明)恰好不看它 ——
   两件事合起来意味着:**没有任何机制会因为这个字段错了而报警**;
3. 投递暂不受影响:发通知用的是**邮件自己的** `session_id`
   (`notify/mail.go:266` 构造 `push.NewMail{SessionID: m.SessionID}`),
   `dispatch` 只用 token 的 `Provider`/`Token`(`push.go:155`)。

⇒ 结论不变但理由更准:**这个字段存在的唯一目的就是"点通知回到那条会话",
而它存的值是错的**;"不会立刻炸"正是它该先修的原因。

写这条注释时我把"投递不读它"顺手写成了"没人读它"——**"不参与这条路径"与"没有读取方"
不是同一件事**,与这两天反复出现的形状同族(把"我没看到"读成"不存在")。
This commit is contained in:
2026-09-17 19:40:00 +08:00
parent 9404f98bde
commit 0bced9fcff

View File

@ -244,9 +244,14 @@ export class PushService {
*
* ★ 这里原本传的是 `getActiveAccount()!.server` —— 那是**服务器地址**
* (`AccountInfo.server`,值长这样:`https://mail.jianfgit.xyz/api/v1`),
* 不是会话 id。服务端对这个字段**不做格式校验**、而且当前**只写不读**
* (投递时用的是**邮件自己的** `session_id`),所以它不会立刻报错 ——
* 只会在库里静静存一条**假的**会话 id,等哪天真按它路由时把人送到别处。
* 不是会话 id。服务端对这个字段**不做格式校验**(只 `TrimSpace`、且允许为空),
* 所以它不会 400、不影响收信、也不进任何日志 ——
* 只会在 `push_tokens` 里存一条**假的**会话 id,而 `GET /me/devices/push-token`
* 还会把它**原样回给客户端**(`handler/push.go` 的 items 里带 `session_id`)。
* 投递本身暂不受影响:发通知用的是**邮件自己的** `session_id`
* (`notify/mail.go` 构造 `push.NewMail{SessionID: m.SessionID}`),
* 而 `dispatch` 只用 token 的 `Provider`/`Token`。
* ⇒ **这个字段存在的唯一目的就是"点通知回到那条会话",而它存的值是错的。**
* "不会立刻炸"正是这种错最值得先修的原因:它不报错,只是让数据开始说谎。
*
* 等客户端真的有了"当前会话"(打开某条会话时),再在这里补报一次真实 id ——