升級 Strapi v5.31+ 後 JWT 過期就被登出?問題藏在你沒注意到的內建路由裡

症狀:App 開啟 15 分鐘後被強制登出 使用者回報一個詭異的問題:App 正常使用一段時間後,突然被強制登出。重新登入後又好了,但過一陣子又被踢出去。 時間規律很明確——正好 15 分鐘。這恰好是我們 JWT 的過期時間。 直覺反應是去查前端的 token refresh 邏輯:interceptor 有沒有正確攔截 401?refresh token 有沒有正確儲存?重試機制有沒有 bug? 查了一輪,全部正常。 錯誤的除錯方向 這個問題前前後後花了不少時間,方向一直在前端打轉: 排查方向 結果 Flutter interceptor 邏輯 正常,有攔截 401 並觸發 refresh Token 儲存機制(SecureStorage) 正常,refresh token 有正確保存 JWT 過期時間設定 確認是 15 分鐘,符合預期 網路連線問題 排除,其他 API 都正常 每個環節看起來都沒問題,但結果就是 refresh 失敗。問題出在哪? 轉折點:看 HTTP Status Code 直到有人(或者說,終於有人)去看了 /auth/refresh 實際回傳的 HTTP status code: # JWT 過期後呼叫 refresh curl -X POST https://api.example.com/api/auth/refresh \ -H "Content-Type: application/json" \ -d '{"refreshToken": "valid-refresh-token-here"}' # 預期:200 OK(新的 JWT) # 實際:403 Forbidden 403,不是 401。 ...

February 6, 2026 · 2 分鐘 · Peter

會員資料不見?這不是我沒要求,是外包商沒做完整的 OAuth 2.0

故事的開始:會員資料集體消失事件 最近收到許多會員的反映,問題驚人地一致: 📝 「我的日記資料不見了!」 👤 「帳號被自動登出,要重新登入」 ⏳「App 一直轉圈圈,什麼都看不到」 😰 「重新開啟 App 也一樣,資料都不見了」 更詭異的是,這些問題似乎沒有規律性,有的使用者正常,有的使用者卻深受其擾。身為技術負責人,這讓我立刻警覺:這不是資料遺失,而是認證機制出問題了。 調查過程:抽絲剝繭找出真相 問題時間軸 第一步:確認資料庫完整性 我的第一個懷疑是資料庫是否真的遺失資料。登入後台查詢,發現: ✅ 關鍵發現: 所有會員的日記資料都完好無缺 這代表問題不在資料層,而是在存取權限上。 第二步:檢查使用者行為模式 整理會員回報的時間點,我發現一個規律: 會員 註冊時間 問題發生時間 間隔 會員 A 30 天前 今天 30 天 會員 B 29 天前 今天 29 天 會員 C 3 天前 正常使用 - 關鍵字:30 天 ⚡ 第三步:檢查 JWT Token 配置 翻開 Strapi 後端的配置檔,真相大白: // Strapi 預設 JWT 設定 jwt: { expiresIn: '30d' // Token 有效期:30 天 } 問題根本原因 💡 關鍵洞察: 使用者以為資料不見了,實際上只是「看不到」而已。資料仍安全地存在資料庫中,只是 Token 過期導致無法存取。 ...

December 6, 2025 · 6 分鐘 · Peter