test.md 5.7 KB

Token机制调整测试说明

本次调整说明

1. 前端调整

  • LQAdminFront 前端调用接口返回401 无效的访问令牌,直接跳转到登录页面

2. 后台调整

  • 2.1 验证token是否按预期处理,用户每次请求后台接口时,token的时长将重置,只有用户在token设置时间范围内都没有请求才作为token超时(需要重新登录)
  • 2.2 用户每次访问后台接口时,日志打印token配置时长、当前token的创建时间、使用时长、剩余时长、刷新token时长信息,用于验证token是否按预期处理

问题根源和修复 ✅

问题1: 前端401跳转

原因: 后台返回的是 HTTP 200 + 业务错误码401,而不是 HTTP 401

解决方案: 在成功响应拦截器中添加对业务错误码401的检查

问题2: Token没有自动刷新 ⚠️ 关键问题!

原因: Token刷新中间件没有被注册!

查看 LQAdminPlatform/src/app/server/app.py,发现只注册了CORS中间件,但没有注册 TokenRefreshMiddleware

影响:

  • ❌ Token验证逻辑从未执行
  • ❌ Token刷新逻辑从未执行
  • ❌ 日志从未打印
  • ❌ 新token从未生成

解决方案: 在 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",
        "/"
    ]
)

问题3: 数据库连接错误

原因: 错误地使用了 async with get_db_connection()

解决方案: 改用 async for db in get_db()

修改文件清单

前端(LQAdminFront)

  1. src/api/request.ts - 401处理 + Token自动更新

后端(LQAdminPlatform)

  1. src/app/services/jwt_token.py - Token验证刷新 + 详细日志
  2. src/app/middleware/token_refresh_middleware.py - 中间件日志增强
  3. src/app/server/app.py - 注册Token刷新中间件(关键修复)
  4. src/app/services/snippet_service.py - 数据库连接修复

测试步骤

1. 重启后台服务器 ⚠️ 必须!

cd LQAdminPlatform
# Ctrl+C 停止
python src/main.py

启动时应该看到:

✅ Token刷新中间件已注册

如果没有这条日志,说明中间件没有注册成功。

2. 重启前端服务器

cd LQAdminFront
# Ctrl+C 停止
npm run dev

3. 清除浏览器缓存

  • F12 → 右键刷新按钮 → "清空缓存并硬性重新加载"
  • 或使用无痕模式(Ctrl+Shift+N)

4. 测试Token滑动刷新(5分钟配置)

配置测试环境

编辑 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已自动刷新

5. 测试401跳转

在浏览器控制台执行:

// 设置无效token
localStorage.setItem('sso_access_token', 'invalid_token_test')

// 刷新页面
location.reload()

预期结果:

  • ✅ 控制台显示 >>> 检测到业务错误码401
  • ✅ 页面自动跳转到 /login
  • ✅ 显示错误提示
  • ✅ localStorage已清空

验证成功标准

后台

  • 启动时看到 "Token刷新中间件已注册"
  • 每次请求都打印token验证日志
  • 超过50%时长后,token自动刷新
  • 响应头包含 X-New-Token
  • 完全过期后返回401

前端

  • 401响应自动跳转登录页
  • 显示错误提示
  • localStorage已清空
  • 控制台显示 "Token已自动刷新"
  • 可以重新登录

常见问题

Q1: 为什么18:04:00访问后,18:05:10还是过期?

A: 因为中间件没有注册,token从未刷新。修复后重启服务器即可。

Q2: 为什么没有打印日志?

A: 因为中间件没有注册,验证逻辑从未执行。修复后重启服务器即可。

Q3: 如何确认中间件已注册?

A: 启动服务器时,查看日志是否有:

✅ Token刷新中间件已注册

Q4: 如何确认token已刷新?

A:

  1. 查看后台日志:Token已刷新,用户: xxx
  2. 查看浏览器控制台:Token已自动刷新
  3. 查看响应头:X-New-Token 存在

相关文档

  • Token中间件问题修复.md - 详细的问题分析和修复说明
  • Token机制调整完成报告.md - 完整的技术文档
  • 数据库连接问题修复.md - 数据库问题说明

最后更新: 2026-02-08 状态: ✅ 已修复 关键修复: 注册Token刷新中间件