From 0bced9fcff0f5fb99908ff2b22c4b4729a5026ac Mon Sep 17 00:00:00 2001 From: JianFeeeee Date: Thu, 17 Sep 2026 19:40:00 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B7=A8=E7=AB=AF:=20fix(=E6=8E=A8=E9=80=81?= =?UTF-8?q?=E5=AE=A2=E6=88=B7=E7=AB=AF)=20=E6=9B=B4=E6=AD=A3=E6=88=91?= =?UTF-8?q?=E4=B8=8A=E4=B8=80=E7=AC=94=E7=9A=84=E6=B3=A8=E9=87=8A=EF=BC=9A?= =?UTF-8?q?`session=5Fid`=20=E4=B8=8D=E6=98=AF"=E5=8F=AA=E5=86=99=E4=B8=8D?= =?UTF-8?q?=E8=AF=BB"=EF=BC=8CGET=20=E4=BC=9A=E5=9B=9E=E7=BB=99=E5=AE=A2?= =?UTF-8?q?=E6=88=B7=E7=AB=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 上一笔 `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`)。 ⇒ 结论不变但理由更准:**这个字段存在的唯一目的就是"点通知回到那条会话", 而它存的值是错的**;"不会立刻炸"正是它该先修的原因。 写这条注释时我把"投递不读它"顺手写成了"没人读它"——**"不参与这条路径"与"没有读取方" 不是同一件事**,与这两天反复出现的形状同族(把"我没看到"读成"不存在")。 --- client/harmony/entry/src/main/ets/api/PushService.ets | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/client/harmony/entry/src/main/ets/api/PushService.ets b/client/harmony/entry/src/main/ets/api/PushService.ets index ee1b4f0..3fb1dc3 100644 --- a/client/harmony/entry/src/main/ets/api/PushService.ets +++ b/client/harmony/entry/src/main/ets/api/PushService.ets @@ -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 ——