Skip to content

fix: accurate token expiration detection, retry optimization, and state consistency (#308)#312

Open
hzexe wants to merge 2 commits intochenyme:mainfrom
hzexe:fix-token-sync-308
Open

fix: accurate token expiration detection, retry optimization, and state consistency (#308)#312
hzexe wants to merge 2 commits intochenyme:mainfrom
hzexe:fix-token-sync-308

Conversation

@hzexe
Copy link

@hzexe hzexe commented Mar 12, 2026


Summary

修复了 Token 管理中的状态同步不一致问题(Issue #308),优化了 401
错误码的识别逻辑(区分业务过期与网络层拦截),并修复了在高频刷新场景下的数据一致性问题及日志系统的一个潜在崩溃 Bug。

Fixed token state synchronization issues (#308), optimized 401 error identification (distinguishing business expiry
from network interception), and resolved data consistency issues during high-frequency refreshes along with a logging
system bug.

Changes

  • 功能新增
  • Bug 修复
  • 重构/清理
  • 文档更新
  • 其他(请说明)

Related Issues

Closes #308

Verification

  • 本地运行验证
  • 单元/集成测试
  • Docker 构建通过
  • 未验证(请说明原因)

验证说明:

1 - 启动服务后,手动刷新已过期的 Token,管理面板能即时显示 expired 状态,不再弹出“刷新失败”错误。
2 - 确认日志中不再出现 KeyError: '"code"',即便上游返回的 Body 包含大括号。
3 - 确认 /admin/tokens 接口返回的数据与内存状态实时同步,解决了刷新后页面显示“脏数据”的问题。

Breaking Changes

  • 有(请说明迁移方式)

详细说明 (Detailed Explanation)

  1. 401 错误细化识别逻辑 (Accurate 401 Identification)
    为了解决 Issue bug: 错误的token,选中刷新状态任然是active #308 中 Token 状态不更新的问题,我们对 401 错误进行了深度细化区分:
  • Token 业务过期判定:
    • 判定条件:状态码 401 + Content-Type: application/json + 关键关键字。
    • 关键字库:新增了 unauthenticated、bad-credentials 识别。
    • 动作:一旦命中,判定为 is_token_expired=True,绕过失败阈值,立即标记为 EXPIRED 并跳过所有重试。
  • 网络/环境拦截判定 (Cloudflare):
    • 判定条件:返回非 JSON 格式且 Server 头包含 cloudflare,或者 Body 包含 challenge-platform。
    • 动作:判定为网络干扰,保留原有逻辑不变。允许失败计数累加并尝试 fallback to local(本地降级),给 Token
      在其他网络环境下重试的机会。
  1. 数据一致性修复 (Consistency Fix)
  • 内存优先读取:修改了 /tokens 接口,使其直接从 TokenManager
    内存中获取状态。由于内存状态是实时的,解决了刷新后立即查询存储导致的“脏数据”问题。
  • 强制持久化:在同步刷新接口返回前增加强制保存,确保 UI 状态与持久化存储最终一致。
  1. 日志系统修复
  • 修复了 loguru 在记录包含大括号(如 JSON Body)的消息时,因 f-string 注入导致的 KeyError:
    '"code"'。改用参数化日志记录方式,提升了系统的健壮性。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

bug: 错误的token,选中刷新状态任然是active

1 participant