python 读取 session 鉴权方法二

Posted on 2026-08-04 05:33  微蓝的天  阅读(2)  评论(0)    收藏  举报

让我先看当前认证的实现,再设计 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.tsAuthContext.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 天是滑动窗口,每次刷新后重置。

博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3