已关闭
bug(auth): commands bypass stored auth config and still require env tokens #110
aflyingto创建于  4月3日关闭于  4月3日
aflyingto成员
4月3日 创建

背景

仓库已经在 internal/config/auth_config.go 中实现了统一认证优先级和本地持久化认证:活动 token 会按 GC_TOKEN -> GITCODE_TOKEN -> 本地 auth.json 解析。

但当前大量业务命令仍直接调用 cmdutil.EnvToken() 或各自复制的 getEnvToken(),只读取环境变量,不读取已登录的本地认证状态。

代码证据

  • internal/config/auth_config.go
  • pkg/cmdutil/auth.go
  • pkg/cmd/pr/create/create.go
  • pkg/cmd/pr/view/view.go
  • pkg/cmd/pr/merge/merge.go
  • pkg/cmd/release/create/create.go
  • pkg/cmd/release/edit/edit.go
  • pkg/cmd/release/upload/upload.go
  • pkg/cmd/release/list/list.go
  • pkg/cmd/issue/comment/comment.go

实际结果

当前认证行为形成了双轨路径:

  • gc auth login / config 层走统一认证状态
  • 大量业务命令运行时仍只认环境变量

结果是用户即使已经执行过 gc auth login,某些命令仍可能报未认证,或者行为和文档描述的认证优先级不一致。

预期结果

业务命令应统一复用仓库已定义的活动 token 解析逻辑,而不是各自绕过 config 直接读环境变量。

影响

  • gc auth login 写入的持久化认证对大量命令并不生效
  • 命令行为与认证文档、配置模型不一致
  • 后续若要统一认证策略,需要在多个命令族重复修复
  • AI / 脚本很难稳定判断哪些命令会消费已登录状态、哪些不会

建议方向

  • 提供统一的命令层 token 解析入口,直接复用 Config().Authentication().ActiveToken(...)
  • 清理命令包中重复的 getEnvToken()
  • 为至少一个 PR 命令族和一个 release 命令族补回归,确保已登录状态被实际消费
likedislike
Aaflyingto成员
4月3日 添加了label:bugpriority:high
Aaflyingto成员
4月3日 关联了pull request:docs: add team agent review task briefs
Aaflyingto成员
4月3日 关闭了 issue
aflyingto成员
4月3日 评论:

该 issue 在 PR #91 合并时被错误自动关闭。PR #91 仅新增 Team agent 审视任务书,并未实现本 issue 对应问题;现重新打开,后续应由真正修复该问题的 PR 关闭。

likedislike
Aaflyingto成员
4月3日 重新打开了 issue
Aaflyingto成员
4月3日 关联了里程碑:v0.5.0
aflyingto成员
4月3日 评论:

Team agent 交付策略

  • 当前已纳入里程碑: v0.5.0
  • 风险等级预期: high
  • 执行模式: Coordinator -> Verifier -> Implementer -> Reviewer -> human final check

建议推进顺序:

  1. 先核验认证现状与已登录状态复现路径,补 status/verified
  2. 收口统一 token 解析入口,避免继续分散读取环境变量
  3. 至少覆盖一个 PR 命令族和一个 release 命令族的回归
  4. 完成安全审查、作者自检、独立评审;合并前保留人工最终确认

说明:

  • 本 issue 属于 v0.5.0 第一批优先项
  • 不应与大范围重构混做,优先做行为收口和最小回归守护
likedislike
Aaflyingto成员
4月3日 关联了pull request:[WIP]fix: close open issue backlog batch
aflyingto成员
4月3日 评论:

验证记录

  • 当前版本或分支: bugfix/issue-110 / PR #92
  • 验证时间: 2026-04-03
  • 复现命令: 临时 GC_CONFIG_DIR 登录后 unset 环境变量执行 ./gc pr diff 85 -R gitcode-cli/cli
  • 实际结果: 问题已复现并已在当前变更中处理
  • 预期结果: 行为与 issue 描述一致收口,并具备最小测试/回归证据
  • 时间线检查: 当前改动尚未合入 main,以 PR #92 进入评审为准
  • 结论: 继续修复,进入 ready-for-review

开发进度

  • 当前状态: ready-for-review
  • 根因: 多命令族的本地 helper 绕过 config-backed auth,只读取环境变量
  • 主要修改: 统一 token fallback 到共享认证解析,并做 config-backed auth 真实命令验证
  • 影响范围: 命令行为、测试与文档/回归脚本
  • 单元测试: go test ./...
  • 构建: go build -o ./gc ./cmd/gc
  • 实际命令验证: 临时 GC_CONFIG_DIR 登录后 unset 环境变量执行 ./gc pr diff 85 -R gitcode-cli/cli;并执行 ./scripts/regression-core.sh
  • 安全影响: 已补最小安全审查;涉及认证、确认语义或凭证路径的项按 risk/high 处理
  • 文档同步: 已同步 docs/COMMANDS.md / docs/REGRESSION.md(按影响范围)
  • 风险或未覆盖项: 本批次归类 risk/high;高风险项仍需人工最终确认后才能合并
  • 关联 PR: #92
likedislike
aflyingto成员
4月3日 评论:

开发进度

  • 当前状态: ready-for-review
  • 根因: 大量命令只读取环境变量 token,绕过已登录的本地认证状态。
  • 主要修改: 收口共享 token 解析,优先环境变量并回退到 config-backed active token;同步清理一批命令族对局部 helper 的依赖。
  • 影响范围: auth/config、pr、release、repo、issue、commit。
  • 单元测试: go test ./...
  • 构建: go build -o ./gc ./cmd/gc
  • 实际命令验证: ./scripts/regression-core.sh
  • 安全影响: 已检查无凭证硬编码;命令层统一认证来源后减少行为漂移。
  • 文档同步: 已更新 docs/COMMANDS.md、docs/REGRESSION.md。
  • 风险或未覆盖项: high-risk 变更,合并前仍需人工最终确认。
  • 关联 PR: !92
likedislike
aflyingto成员
4月3日 评论:

开发进度

  • 当前状态: ready-for-review
  • 根因: 多个命令族仍通过局部 getEnvToken() 仅读取环境变量,绕过持久化认证状态。
  • 主要修改: 将仍在使用局部 helper 的命令族统一回接到 cmdutil.EnvToken() 的 config-backed auth 解析路径。
  • 影响范围: cmdutil/auth.go 及多组 pr / release / issue / commit 命令 helper。
  • 单元测试: go test ./...
  • 构建: go build -o ./gc ./cmd/gc
  • 实际命令验证: 临时 GC_CONFIG_DIR 登录后,unset 环境变量执行 ./gc pr diff 85 -R gitcode-cli/cli
  • 安全影响: 认证路径收口;无新增凭证落盘行为。
  • 文档同步: 已同步更新命令与回归说明。
  • 风险或未覆盖项: 仍需独立评审确认是否还有遗漏命令绕过共享入口。
  • 关联 PR: #92
likedislike
Aaflyingto成员
4月3日 关闭了 issue