Skip to content

feat(auth): API 令牌 + 设备码授权登录 + pm CLI 骨架 - #63

Merged
Color2333 merged 2 commits into
mainfrom
feat/auth-api-tokens
Sep 2, 2026
Merged

Color2333 merged 2 commits into
mainfrom
feat/auth-api-tokens

Conversation

@Color2333

Copy link
Copy Markdown
Owner

概述

登录/权限系统升级(单用户 + API 令牌模型),为 pm CLI / Claude Code / ZCode 等 harness 接入打地基。

服务端

  • 新表 api_tokens(SHA-256 哈希存储、read/write scope、有效期、last_used、可吊销)+ device_auth_requests(设备码授权状态机)
  • 新端点:GET /auth/me、POST/GET/DELETE /auth/tokens(仅网页会话)、POST /auth/device/start|poll(无鉴权+白名单)、GET /auth/device/{user_code}、POST /auth/device/{user_code}/authorize|deny(仅网页会话)
  • AuthMiddleware 支持 pmt_ API 令牌:GET→read、变更→write scope 按 HTTP 方法强制;令牌可吊销自己(pm logout),管理他人令牌仅限 JWT
  • MCP /mcp 换用 DB 令牌验证器(fastmcp TokenVerifier 扩展点),保留静态 MCP_AUTH_TOKEN 应急回落
  • PG 启动时自动 alembic upgrade head,配合 auto_deploy 合并即上线建表

前端

  • 设置页新增「API 令牌」tab:创建(scope/有效期)、明文一次性展示 + 复制、ConfirmDialog 吊销
  • /device 设备码授权页:深链放行登录门,未登录内嵌登录组件,确认设备码 → 批准/拒绝

pm CLI(apps/cli)

  • pm login:设备码授权流程(打开浏览器 → 轮询 → 签发令牌),--token 粘贴兜底
  • pm logout(吊销自己 + 清配置)、pm whoami、pm doctor
  • 配置 ~/.config/papermind/config.toml(0600),env PAPERMIND_SERVER_URL / PAPERMIND_TOKEN 优先
  • [project.scripts] pm = apps.cli.main:app,pipx install /path/to/PaperMind 即可装机

测试

  • 新增 tests/test_auth_tokens.py 13 例:令牌生命周期/scope 强制/过期吊销/设备流程全链路/中间件 401·403
  • 本地 uvicorn + 临时 SQLite 端到端验证:login --token → whoami → doctor → logout 自吊销 → 旧令牌 401;设备码 start → authorize → poll approved 全链路通过
  • 全量 pytest 82 passed;ruff、tsc、vite build 全部通过

合并后

  • 部署由 auto_deploy 自动完成(30 分钟内),启动时自动建表
  • 本机执行 pipx install + pm login 即接入;网页「设置 → API 令牌」可随时管理/吊销

登录/权限系统升级(单用户 + API 令牌模型):

后端
- api_tokens / device_auth_requests 表 + alembic 迁移;令牌 SHA-256 哈希存储
- /auth/me、/auth/tokens(创建/列表/吊销,仅网页会话)、/auth/device/{start,poll,authorize,deny}
- AuthMiddleware 支持 pmt_ API 令牌:GET→read、变更→write scope 强制,last_used 节流
- 令牌可吊销自己(pm logout),管理他人令牌仅限 JWT
- MCP /mcp 换 DB 令牌验证器(fastmcp TokenVerifier),保留静态 MCP_AUTH_TOKEN 应急
- PG 启动时自动 alembic upgrade head,auto_deploy 合并即上线

前端
- 设置页新增「API 令牌」tab(创建/明文一次性展示/吊销)
- /device 设备码授权页(未登录内嵌登录,批准/拒绝)

CLI(pm)
- pm login 设备码流程 + --token 粘贴兜底、logout(自吊销)、whoami、doctor
- 配置 ~/.config/papermind/config.toml(0600),env PAPERMIND_SERVER_URL/TOKEN 优先
- [project.scripts] pm = apps.cli.main:app

测试:tests/test_auth_tokens.py 13 例(令牌生命周期/scope/设备流程/中间件),全量 82 passed
@github-actions

github-actions Bot commented Sep 2, 2026

Copy link
Copy Markdown

🔍 OpenCode PR Review Required

这是一个受保护的分支,merge 前需要进行 code review。

请运行以下命令进行 OpenCode review:

/oc review https://github.com/Color2333/PaperMind/pull/$PR_NUM

或者在 PR 页面评论 /oc 来触发 OpenCode review。


This is an automated reminder from PR Review Gate.

- apps/cli/__main__.py:PyInstaller / python -m apps.cli 双用入口
- .github/workflows/pm-cli-release.yml:四平台矩阵构建
  (darwin-arm64 / darwin-x86_64 / linux-x86_64 / windows-x86_64),
  tag pm-v* 触发发布 GitHub Release,workflow_dispatch 手动构建
- scripts/build-pm-cli.sh:本地一条命令构建(CLI 只依赖 typer+httpx,产物约 13MB)
- scripts/install-pm.sh / install-pm.ps1:一键安装(下载最新 Release 到 PATH,
  macOS 自动去 quarantine),支持 curl|bash / irm|iex
- README 安装章节改为免 Python 下载安装
@github-actions

github-actions Bot commented Sep 2, 2026

Copy link
Copy Markdown

🔍 OpenCode PR Review Required

这是一个受保护的分支,merge 前需要进行 code review。

请运行以下命令进行 OpenCode review:

/oc review https://github.com/Color2333/PaperMind/pull/$PR_NUM

或者在 PR 页面评论 /oc 来触发 OpenCode review。


This is an automated reminder from PR Review Gate.

@Color2333
Color2333 merged commit 23f3c2b into main Sep 2, 2026
5 of 6 checks passed
@Color2333
Color2333 deleted the feat/auth-api-tokens branch September 2, 2026 08:59
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant