让我先看当前认证的实现,再设计 refresh token 方案。
现在我有完整的方案图了。需要改 4 个地方:
1/4 后端 — auth.js 增加 refresh token 函数
2/4 后端 — login 返回 refresh_token + /refresh 端点
Now add the /refresh endpoint:
3/4 前端 — api.ts + AuthContext
现在实现对 api.ts 和 AuthContext.tsx 的修改:
Now update AuthContext.tsx:
所有零新增错误。构建验证:
4/4 Python — download_v3.py refresh token demo
所有错误都是之前就存在的(Permission 类型不匹配、PipelineStep 未找到等),与本次修改无关。本次四文件修改零新增错误。
修改总结
改了什么(4 个文件)
| 文件 | 改动 |
|---|---|
server/middleware/auth.js |
+generateRefreshToken() + verifyRefreshToken();refresh 30 天过期,带 type:'refresh' 标记防混用 |
server/routes/auth.js |
login 响应新增 refresh_token 字段;新增 POST /auth/refresh 端点 |
src/lib/api.ts |
新增 refresh token 存取函数;request() 自动捕获 401 → refresh → 透明重试;并发 401 去重 |
src/context/AuthContext.tsx |
login 时保存 refresh_token;logout 时一并清除 |
scripts/download_v3.py |
新的 Python demo,支持 refresh token 自动续期 |
认证流程对比
v2(之前):
access_token(24h) 过期 → 必须输密码重新登录
v3(现在):
access_token(24h) 过期 → refresh_token(30d) 自动换新 token 对
refresh_token 也过期 → 才需要输入密码登录
Token 旋转刷新
POST /auth/login
→ { token: "eyJ...(24h)", refresh_token: "eyJ...(30d)" }
POST /auth/refresh { refresh_token: "..." }
→ { token: "eyJ...(新的)", refresh_token: "eyJ...(新的,重置30d)" }
每次 refresh 都会同时轮换 access 和 refresh token,旧 token 立即失效。只要在 30 天内至少用一次,就能无限续期。
Python v3 使用
# 首次:登录并缓存 token 对
python scripts/download_v3.py --user admin --pass 123456
# 后续 30 天内:无需密码,自动续期
python scripts/download_v3.py --task-number TK-20260804-0007 --all --dir ./out
# 显式登录(清除旧缓存)
python scripts/download_v3.py --login
不需要!有了 refresh token 机制后,手动复制 token 那一步已经是过去式了。现在只需要做一次密码登录,然后每天自动刷新即可永久续期。
我来写一个 Windows 计划任务的自动刷新脚本:
需要在 download_v3.py 加一个 --list 参数,让刷新脚本能静默调用:
全部完成。现在两种方式都能做到一劳永逸:
方式一:手动配置(1 分钟)
# 1. 首次登录,缓存 token 对
python scripts/download_v3.py --login
# 2. 打开 Windows 任务计划程序(Win+R → taskschd.msc)
# 创建基本任务 → 触发器: 每天一次 → 操作: 启动程序
# 程序: cmd.exe
# 参数: /c "E:\02.software_design\AI\blot_new\monitor\project\scripts\auto_refresh.cmd" >> %USERPROFILE%\.monitor_refresh.log 2>&1
方式二:一键脚本配置(管理员 PowerShell)
# 首次使用:自动引导登录 + 创建计划任务
.\scripts\setup_daily_task.ps1 -AutoLogin
# 后续只需运行一次:每天 9:00 自动续期
.\scripts\setup_daily_task.ps1 -ScheduleTime "08:00"
完整原理
[首次] python download_v3.py --login → 输入一次密码
↓
缓存 {access_token(24h), refresh_token(30d)} 到 ~/.monitor_token
↓
[每天] Windows 计划任务 → auto_refresh.cmd → download_v3.py --list
↓
请求 API → 401 → 用 refresh_token 换新 token 对 → 重新缓存
↓
refresh_token 每次刷新后重置 30d 有效期
↓
只要电脑每天开机,token 永不失效
关键点:你不需要再手动打开浏览器控制台复制 token 了。和密码登录那种"每次都要做"不同,这次是一次登录 + 每天自动续,refresh token 的 30 天是滑动窗口,每次刷新后重置。
浙公网安备 33010602011771号