From 9bc6a691739a34b7663a33aa97dc8c7155abac8a Mon Sep 17 00:00:00 2001 From: AmintaCCCP Date: Tue, 2 Jun 2026 16:30:26 +0800 Subject: [PATCH] fix: persist RPC download secret across client restarts The RPC download secret (aria2 --rpc-secret) was excluded from Zustand persistence, causing it to disappear after every client restart in client-only and web-only modes. - Include secret in Zustand partialize to persist to IndexedDB - Restore secret in mergePersistedState hydration logic - Initialize hasStoredSecret from persisted secret on mount Co-Authored-By: Claude Opus 4.8 --- src/components/settings/NetworkPanel.tsx | 2 +- src/store/useAppStore.ts | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/components/settings/NetworkPanel.tsx b/src/components/settings/NetworkPanel.tsx index 00e730aa..f0bb9239 100644 --- a/src/components/settings/NetworkPanel.tsx +++ b/src/components/settings/NetworkPanel.tsx @@ -24,7 +24,7 @@ export const NetworkPanel: React.FC = ({ t }) => { // --- RPC Download state --- const [rpcForm, setRpcForm] = useState(rpcDownloadConfig); const [showSecret, setShowSecret] = useState(false); - const [hasStoredSecret, setHasStoredSecret] = useState(false); + const [hasStoredSecret, setHasStoredSecret] = useState(() => !!rpcDownloadConfig.secret); const [rpcTesting, setRpcTesting] = useState(false); const [rpcTestResult, setRpcTestResult] = useState<{ success: boolean; error?: string; version?: string } | null>(null); const [rpcSaving, setRpcSaving] = useState(false); diff --git a/src/store/useAppStore.ts b/src/store/useAppStore.ts index 37974350..f92ad107 100644 --- a/src/store/useAppStore.ts +++ b/src/store/useAppStore.ts @@ -563,7 +563,7 @@ const normalizePersistedState = ( enabled: typeof obj.enabled === 'boolean' ? obj.enabled : false, host: typeof obj.host === 'string' ? obj.host : '', port: typeof obj.port === 'number' && Number.isFinite(obj.port) ? obj.port : 6800, - // secret 不从持久化恢复,仅在内存中 + secret: typeof obj.secret === 'string' ? obj.secret : undefined, }; } return { enabled: false, host: '', port: 6800 }; @@ -1539,12 +1539,12 @@ export const useAppStore = create()( username: state.proxyConfig.username, // password 不持久化,仅保留在内存中 }, - // 持久化 RPC 下载配置,但排除密钥(安全考虑) + // 持久化 RPC 下载配置(含密钥,确保重启后不丢失) rpcDownloadConfig: { enabled: state.rpcDownloadConfig.enabled, host: state.rpcDownloadConfig.host, port: state.rpcDownloadConfig.port, - // secret 不持久化,仅保留在内存中 + secret: state.rpcDownloadConfig.secret, }, }), migrate: (persistedState) => {