已关闭
bug(auth): commands bypass stored auth config and still require env tokens #110
aflyingto创建于 4月3日关闭于 4月3日
aflyingto
4月3日 评论:
4月3日 评论:
该 issue 在 PR #91 合并时被错误自动关闭。PR #91 仅新增 Team agent 审视任务书,并未实现本 issue 对应问题;现重新打开,后续应由真正修复该问题的 PR 关闭。


aflyingto
4月3日 评论:
4月3日 评论:
Team agent 交付策略
- 当前已纳入里程碑:
v0.5.0 - 风险等级预期:
high - 执行模式:
Coordinator -> Verifier -> Implementer -> Reviewer -> human final check
建议推进顺序:
- 先核验认证现状与已登录状态复现路径,补
status/verified - 收口统一 token 解析入口,避免继续分散读取环境变量
- 至少覆盖一个 PR 命令族和一个 release 命令族的回归
- 完成安全审查、作者自检、独立评审;合并前保留人工最终确认
说明:
- 本 issue 属于
v0.5.0第一批优先项 - 不应与大范围重构混做,优先做行为收口和最小回归守护


aflyingto
4月3日 评论:
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


aflyingto
4月3日 评论:
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


aflyingto
4月3日 评论:
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


背景
仓库已经在
internal/config/auth_config.go中实现了统一认证优先级和本地持久化认证:活动 token 会按GC_TOKEN->GITCODE_TOKEN-> 本地auth.json解析。但当前大量业务命令仍直接调用
cmdutil.EnvToken()或各自复制的getEnvToken(),只读取环境变量,不读取已登录的本地认证状态。代码证据
internal/config/auth_config.gopkg/cmdutil/auth.gopkg/cmd/pr/create/create.gopkg/cmd/pr/view/view.gopkg/cmd/pr/merge/merge.gopkg/cmd/release/create/create.gopkg/cmd/release/edit/edit.gopkg/cmd/release/upload/upload.gopkg/cmd/release/list/list.gopkg/cmd/issue/comment/comment.go实际结果
当前认证行为形成了双轨路径:
gc auth login/ config 层走统一认证状态结果是用户即使已经执行过
gc auth login,某些命令仍可能报未认证,或者行为和文档描述的认证优先级不一致。预期结果
业务命令应统一复用仓库已定义的活动 token 解析逻辑,而不是各自绕过 config 直接读环境变量。
影响
gc auth login写入的持久化认证对大量命令并不生效建议方向
Config().Authentication().ActiveToken(...)getEnvToken()