需配置 github personal access token 到全局 ~/.composer/auth.json(windows 为 %userprofile%\appdata\roaming\composer\auth.json),权限设为 600,内容仅含 "github-oauth": {"github.com": "token"},并确保 token 具备 public_repo 和 read:packages 权限。

composer install 时提示 “API rate limit exceeded” 怎么办
这是 GitHub 的未认证请求限流触发的典型错误,composer install 或 composer update 拉取私有库、GitHub Packages 或高频访问 public repo 时都可能遇到。不配 token,Composer 默认走匿名 API 请求,每小时最多 60 次 —— 够本地试玩,不够 CI/CD 或团队协作。
解决路径只有一条:让 Composer 在所有项目里自动带上你的 GitHub Personal Access Token(PAT)。关键不是“能不能配”,而是“配在哪才真正全局生效”。
-
~/.composer/auth.json是唯一能实现「全局生效」的位置,它会被所有 Composer 命令(无论当前在哪个项目目录)自动读取 - Token 必须带
repo和read:packages权限(如果用 GitHub Packages),最低要求是public_repo - 别把 token 写进项目级
auth.json(比如./auth.json),那只会对当前项目生效,CI 脚本或别人 clone 后直接失效 - 生成 token 的页面是:
https://github.com/settings/tokens/new,勾选权限后复制,别关网页——token 只显示一次
~/.composer/auth.json 的正确写法和权限风险
这个文件不是模板,不能靠 composer config 命令自动生成(它默认只写项目级配置)。必须手动创建并严格控制权限,否则 token 泄露就是分分钟的事。
- 执行
mkdir -p ~/.composer确保目录存在,再用编辑器新建~/.composer/auth.json - 内容格式必须是合法 JSON,且只包含
github-oauth字段,例如:
{
"github-oauth": {
"github.com": "ghp_xxxYourTokenHerexxx"
}
}
- 文件权限必须设为
600:chmod 600 ~/.composer/auth.json,否则 Composer 会拒绝读取(报错auth.json is not readable) - 别在
auth.json里塞其他字段(比如http-basic或自定义仓库),除非你明确需要;混用容易导致认证优先级混乱 - Windows 用户注意路径是
%USERPROFILE%\AppData\Roaming\Composer\auth.json,不是~/.composer
验证 token 是否真被用了
光看 install 不报错不等于 token 生效。GitHub 的 rate limit 响应头不会总显式报错,有时只是悄悄降速或返回缓存结果。
- 运行
composer diagnose,输出里出现GitHub API: OK才算初步通过 - 更可靠的方式是临时删掉 token,再跑一次
composer clear-cache && composer update --dry-run,观察是否立刻报API rate limit exceeded;恢复 token 后再试,错误消失即生效 - 抓包验证(可选):用
curl -H "Authorization: token ghp_xxx..." https://api.github.com/rate_limit直接查剩余配额,对比有无 token 的rate.limit值(有 token 是 5000/小时,没 token 是 60)
CI 环境下 token 怎么安全透传
本地配好 auth.json 没用,CI(比如 GitHub Actions、GitLab CI)默认没有这个文件,也不能硬塞明文 token 到日志里。
- GitHub Actions 推荐用
composer/installer官方 Action,它会自动注入GITHUB_TOKEN到 Composer 配置中,无需手动生成 PAT - 其他 CI:用环境变量 + 动态生成
auth.json,例如在 job 开头加一步:echo '{"github-oauth":{"github.com":"'$GH_TOKEN'"}}' > ~/.composer/auth.json,然后立即chmod 600 ~/.composer/auth.json - 绝对禁止把 token 写死在
.gitlab-ci.yml或workflow.yaml里;也别用composer config把 token 记进 git 仓库的composer.json - 如果用私有 Packagist 镜像(如 Satis、Private Packagist),token 可以只配在镜像服务端,客户端完全不用碰 GitHub 认证
token 生效不难,难的是每次换机器、进容器、上 CI 时,都得重新检查 auth.json 路径、权限、JSON 格式、token 有效期——漏一个,就回到 60 次/小时的原始社会。










