应配置 github personal access token 并通过 composer config -g github-oauth.github.com 全局设置,仅需 public_repo 或 repo 权限,避免泄露风险。

Composer install 报错 “Could not fetch https://api.github.com/... 401 Unauthorized”
这是典型的 GitHub 账号未授权导致的 Composer 访问失败。Composer 在安装依赖时,若包源是 GitHub(尤其是私有库或高频率访问的公开库),会通过 GitHub API 获取元数据或 ZIP 包,而 GitHub 自 2021 年起已强制要求所有 API 请求携带认证凭据,匿名请求直接返回 401 Unauthorized。
关键点:不是 SSH 密钥问题,也不是 git clone 失败,而是 Composer 底层调用 https://api.github.com 时没带 token。
- 错误常见于 CI 环境、Docker 构建、新部署服务器,或本地首次使用 Composer 访问 GitHub 包
- 即使
git config --global user.name已设置,也完全无关——GitHub API 不认 Git 用户配置 - 不要尝试改
composer.json中的repositories为git@github.com:...,那只是换了个失败路径(SSH key 未添加到 agent 或 GitHub 账户时照样报错)
生成 GitHub Personal Access Token 并限制作用域
必须用最小权限原则生成 token,避免泄露后造成账户风险。Composer 只需要读取公开/私有仓库元数据和下载 ZIP,不需要写权限或访问敏感 API。
登录 GitHub → Settings → Developer settings → Personal access tokens → Tokens (classic) → Generate new token → Generate new token (classic):
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- Token description 填
composer-read-packages这类可识别用途的名称 - 只勾选
public_repo(公开库)和/或repo(含私有库)——绝对不要勾选delete_repo、admin:org等高危权限 - 不勾选
gist、notifications、user等无关 scope - 生成后立即复制保存——页面关闭后无法再次查看明文 token
让 Composer 使用该 Token 的三种方式(按推荐顺序)
优先级从高到低:全局配置 > 项目级 auth.json > 环境变量。推荐用全局配置,一次设置,长期生效,且不会误提交到代码库。
- 执行
composer config -g github-oauth.github.com <your_token_here></your_token_here>(注意:域名是github.com,不是api.github.com) - 验证是否写入:检查
~/.composer/auth.json(Linux/macOS)或%APPDATA%\Composer\auth.json(Windows),内容应类似:{"github-oauth": {"github.com": "ghp_abc123..."}} - 如需临时覆盖(如 CI 中),可设环境变量
GITHUB_TOKEN=ghp_abc123...,Composer 会自动读取(v2.2+ 默认支持) - 切勿把 token 写进项目根目录的
auth.json并提交 Git——哪怕加了.gitignore,也容易因疏忽泄露
验证是否生效 & 常见失效场景
运行 composer clear-cache 后再试 composer install。如果仍报 401,重点排查以下几点:
- token 是否已过期(classic token 默认永不过期,但若手动设了 expiry 则需重生成)
- 是否拼错域名:配置的是
github.com,不是www.github.com或api.github.com - 是否在企业 GitHub(GitHub Enterprise Server)环境?此时需用
composer config -g github-oauth.YOUR-GHE-DOMAIN token,且域名必须与composer.json中 repository URL 的 host 完全一致 - CI 环境中是否误用了
COMPOSER_AUTH环境变量?它要求 JSON 格式字符串,比如:COMPOSER_AUTH='{"github-oauth": {"github.com": "ghp_..."}}',漏掉引号或 JSON 格式错误会导致静默失效
token 本身不可调试、无日志输出,出问题只能靠配置项逐个核对——这也是最容易卡住的地方。










