配置GitHub个人访问令牌可解决Composer因API速率限制导致的下载失败。需生成带repo权限的Token,通过composer config -g github-oauth.github.com 写入本地auth.json,确保无多余空格,即可自动认证请求。

GitHub API 速率限制触发时的典型报错
执行 composer install 或 composer update 时,如果看到类似以下错误,说明 Composer 正在通过 GitHub API 获取包信息,且已超出未认证用户的限速(60 次/小时):
Failed to download vendor/package: Could not fetch https://api.github.com/repos/vendor/package/zipball/commit-hash, enter your GitHub credentials to go over the API rate limit
这个提示不是让你手动输密码——GitHub 已停用密码认证;它实际是在催你配置个人访问令牌(Personal Access Token)。
生成 GitHub Token 并配置到 Composer
Token 必须带 repo 权限(只读即可),其他权限如 delete_repo、admin:org 完全不需要,避免安全风险。
- 访问 https://www.php.cn/link/9c450eb90c31bc12f1691f235da5a0cc,勾选
repo(仅此一项足够) - 生成后立即复制 Token 字符串(页面关闭后无法再次查看)
- 运行命令写入全局配置:
composer config -g github-oauth.github.com
执行后,Composer 会把 Token 写进 ~/.composer/auth.json(Linux/macOS)或 %APPDATA%\Composer\auth.json(Windows),后续所有项目自动携带认证头请求 GitHub API。
验证是否生效 & 常见失效场景
重新运行 composer update --dry-run。若不再弹出认证提示、也不再报 403 或速率限制错误,说明配置成功。
- Token 过期或被手动删除:GitHub Token 默认永不过期,但可随时在设置页 revoke;一旦删了,
auth.json里的值就失效 - 公司网络拦截或代理改写 Host:某些企业代理会强制将
api.github.com解析到内部镜像,导致 Token 认证头被丢弃;可临时加--verbose看实际请求域名和响应头 - 多个 GitHub 账号混用:Composer 只支持一个
github.com的 Token;如需切换账号,必须手动编辑auth.json替换值
为什么不用 --no-interaction 或跳过认证?
有人试过加 --no-interaction 强制跳过提示,但这只是掩盖问题:Composer 仍会以未认证方式调 GitHub API,大概率卡在某个包元数据拉取环节,最终失败。
还有人想用 GitHub Packages 或私有 Packagist 镜像绕开,但对绝大多数公开包来说,这是过度设计——配好 Token 是最轻量、最直接、也最符合 Composer 官方推荐路径的解法。
Token 本身不涉及代码或凭证硬编码,只存本地配置文件,只要别把 auth.json 提交进 Git 就没问题。最容易被忽略的是:生成 Token 后忘记粘贴进命令,或者多复制了一个空格进去——那个空格会让整个 Token 失效,而错误表现和没配一样。










