原因: 后台返回的是 HTTP 200 + 业务错误码401,而不是 HTTP 401
解决方案: 在成功响应拦截器中添加对业务错误码401的检查
原因: Token刷新中间件没有被注册!
查看 LQAdminPlatform/src/app/server/app.py,发现只注册了CORS中间件,但没有注册 TokenRefreshMiddleware。
影响:
解决方案: 在 app.py 中添加中间件注册:
from app.middleware.token_refresh_middleware import TokenRefreshMiddleware
app.add_middleware(
TokenRefreshMiddleware,
exclude_paths=[
"/auth/login",
"/auth/captcha",
"/auth/refresh",
"/docs",
"/openapi.json",
"/redoc",
"/favicon.ico",
"/health",
"/"
]
)
原因: 错误地使用了 async with get_db_connection()
解决方案: 改用 async for db in get_db()
src/api/request.ts - 401处理 + Token自动更新src/app/services/jwt_token.py - Token验证刷新 + 详细日志src/app/middleware/token_refresh_middleware.py - 中间件日志增强src/app/server/app.py - 注册Token刷新中间件(关键修复)src/app/services/snippet_service.py - 数据库连接修复cd LQAdminPlatform
# Ctrl+C 停止
python src/main.py
启动时应该看到:
✅ Token刷新中间件已注册
如果没有这条日志,说明中间件没有注册成功。
cd LQAdminFront
# Ctrl+C 停止
npm run dev
编辑 LQAdminPlatform/src/app/config/config.ini:
[admin_app]
ADMIN_TOKEN_EXPIRE_MINUTES=5 # 测试用:5分钟
| 时间 | 操作 | 预期结果 |
|---|---|---|
| 18:00:00 | 登录 | 获取token,有效期至18:05:00 |
| 18:02:00 | 访问接口 | 正常访问,不刷新(40%) |
| 18:02:30 | 访问接口 | 正常访问,不刷新(50%临界) |
| 18:03:00 | 访问接口 | 正常访问,刷新token(60%),新有效期至18:08:00 |
| 18:04:00 | 访问接口 | 正常访问,不刷新(使用新token,20%) |
| 18:07:00 | 访问接口 | 正常访问,刷新token(使用新token,80%) |
| 18:13:00 | 访问接口 | 401错误,跳转登录(超过5分钟未访问) |
每次访问接口时,应该看到:
Token验证信息 - 用户: admin
Token配置时长: 5 分钟
Token创建时间: 2026-02-08 18:00:00 UTC
Token过期时间: 2026-02-08 18:05:00 UTC
Token已使用时长: 3.00 分钟 (180 秒)
Token剩余时长: 2.00 分钟 (120 秒)
Token刷新: 已使用时长超过阈值 (2.50 分钟),生成新token
当token刷新时:
Token已刷新,用户: admin, 路径: /api/v1/xxx
当token刷新时,应该看到:
Token已自动刷新
在浏览器控制台执行:
// 设置无效token
localStorage.setItem('sso_access_token', 'invalid_token_test')
// 刷新页面
location.reload()
预期结果:
>>> 检测到业务错误码401/loginX-New-TokenA: 因为中间件没有注册,token从未刷新。修复后重启服务器即可。
A: 因为中间件没有注册,验证逻辑从未执行。修复后重启服务器即可。
A: 启动服务器时,查看日志是否有:
✅ Token刷新中间件已注册
A:
Token已刷新,用户: xxxToken已自动刷新X-New-Token 存在最后更新: 2026-02-08 状态: ✅ 已修复 关键修复: 注册Token刷新中间件