From ba31fe9c39716462396e5a84738b60b83127e005 Mon Sep 17 00:00:00 2001 From: awei Date: Thu, 30 Jul 2026 02:02:19 +0800 Subject: [PATCH] =?UTF-8?q?docs(app):=20=E6=A8=99=E6=B3=A8=E3=80=8C401=20?= =?UTF-8?q?=E4=B8=8D=E8=A8=BB=E9=8A=B7=20device=20token=E3=80=8D=E7=95=99?= =?UTF-8?q?=E4=B8=8B=E7=9A=84=E6=B4=9E=E5=B7=B2=E7=94=B1=E5=BE=8C=E7=AB=AF?= =?UTF-8?q?=E8=A3=9C=E4=B8=8A=EF=BC=88dispatch=20#65=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 第十一輪決定 session 失效時不呼叫註銷(那支 API 只會再回一次 401)—— 這讓舊使用者的 token 列留在後端,而 FCM token 換人登入時不會變, 結果是前一位的行程通知與對話內容預覽會送到下一位的手機。 後端已改成「一支 token 只能有一位主人」,App 這端維持不變仍然安全; 在原決定旁邊標注清楚,免得下次有人以為那個決定是無代價的。 Co-Authored-By: Claude Opus 5 --- docs/TODO.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/docs/TODO.md b/docs/TODO.md index b581b72..8245064 100644 --- a/docs/TODO.md +++ b/docs/TODO.md @@ -1419,6 +1419,12 @@ WS 一回來就對得上。**要做就先做 `completeTrip`**。 - 🔑 **session 失效(401)不可去註銷**:那支 API 只會再回一次 401(並再觸發一次清理)。 乘客端原本 `logout()` 一支打天下,這批**拆成 `logout()`/`_clearSession()`** ——與司機端同一個結構,也是第三輪學到的同一條。 + ⚠️ **這個決定留下的洞已由後端補上(2026-07-30,dispatch + [PR #65](https://github.com/thothawei/fleet-dispatch/pull/65))**:401 不註銷 ⇒ + 舊使用者的那一列會留在 `device_tokens` 裡,而 **FCM token 換人登入時不會變**, + 於是「A 的 token 過期 → B 在同一台手機登入 → A 的行程通知與**對話內容預覽** + 全送到 B 的手機」。後端改成「一支 token 只能有一位主人」(註冊時搬走別人身上的同一支), + **App 這端維持不變仍然是安全的**。 - **註冊失敗、對帳失敗一律靜默**:兩者都是使用者沒按任何東西的背景動作 (同 2026-07-28 修掉的那一族)。推播只是輔助管道,WS 與 15 秒輪詢照常運作。