python 读取 session 鉴权方法二
让我先看当前认证的实现,再设计 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