D-20260814-13|帳號 PIN 修改與一次性助記詞¶
背景與驅動力¶
帳號分類原列出 PIN 修改、查看助記詞與登出,但正式 UI 沒有入口;provider 還把 changePin 的舊 PIN 寫死為空字串。KeyManager 只保存由助記詞推導的 encrypted seed,無法也不應事後還原助記詞。
考慮過的選項¶
- 額外封存助記詞以供事後查看:增加高價值秘密且違反既有一次性備份流程,棄。
- 保留空舊 PIN 的 pre-alpha 例外:目前開發期沒有需支援的 legacy profile,棄。
- current profile 以 old/new PIN 重加密,助記詞只在建檔顯示,正式 Account 提供入口(採納)。
決定¶
- canon 移除「事後查看助記詞」。建檔仍一次性顯示 24 詞並完成隨機字位抄寫驗證;之後只保存 encrypted seed。遺失助記詞無找回管道,未新增任何封存欄位。
IdentityData.changePin(oldPin, newPin)拒絕空值並轉呼 KeyManager 同名能力;錯誤以既有errors.keyManager.*與參數傳回。不得保留空舊 PIN、pre-PIN 分支或 migration。- Account UI 收目前 PIN、新 PIN與確認值;不一致不呼叫 provider,成功後清空欄位。正式登出入口
呼叫既有
signOut(),由 AppShell lifecycle 撤銷身分 session、清 TURN session 並收攤 generation。 - 未解鎖時同一
/settings/account顯示建立/匯入入口,不建立第二套帳號頁。
後果與影響¶
玩家可以在正式 UI 驗證舊 PIN 後換 PIN,也能明確登出;系統不會為「可查看助記詞」承諾保存一份 原本不存在的秘密。