composer install 要求输 github 账号密码是因为 github 已停用密码认证,触发 rate limit 后 composer fallback 到失效方式;正确解法是配置带 repo 权限的 personal access token(pat)并用 composer config -g github-oauth.github.com 全局设置。

为什么 composer install 突然要你输 GitHub 账号密码?
GitHub 已停用基于账号密码的 API 认证(2021 年 8 月起),现在所有通过 Composer 访问私有仓库或高频拉取公开仓库(如依赖含 dev- 分支、subtree 或大量 git 类型包)时,都会触发 rate limit,提示 Authentication failed 或要求输入用户名/密码——这其实是 Composer 在 fallback 到已失效的认证方式。
解决办法不是换回旧流程,而是用 Personal Access Token(PAT)替代。OAuth token(oauth\_composer)早已过时且不被推荐,它需要额外配置 GitHub OAuth App,还容易因权限变更或 token 失效静默失败。
正确路径是:生成一个带 repo 权限的 PAT → 告诉 Composer 使用它 → 不再弹窗、不卡安装。
怎么生成并配置 GitHub Personal Access Token?
登录 GitHub → Settings → Developer settings → Personal access tokens → Tokens (classic) → Generate new token → 给 token 命名(比如 composer-read-repo)→ 勾选 repo(必须;若只装公开包,public\_repo 也行)→ Generate token → 复制出来(仅此一次!关页就再也看不到明文)。
然后执行:
composer config -g github-oauth.github.com <your-token-here>
注意:github.com 是域名,不能写成 https://github.com 或带路径;-g 表示全局配置(写入 ~/.composer/auth.json),如果只想对当前项目生效,去掉 -g,会写入项目根目录下的 auth.json。
- token 必须含
repo权限,否则访问私有库仍失败 - 别把 token 硬编码进
composer.json或提交到 Git ——auth.json默认被.gitignore排除,但得确认项目里没手动删掉这一行 - 如果用了 GitHub Enterprise,把
github.com换成你的实例域名(如git.example.com)
配置后还是报错?检查这几个地方
常见现象:token 配好了,composer install 却仍卡住、报 401 Unauthorized 或提示 Invalid credentials。
- 确认 token 没过期:GitHub 的 classic token 默认永不过期,但如果你勾了
Expiration并设了短期时限,就得重生成 - 检查
auth.json文件权限:Linux/macOS 下,确保该文件不是 world-readable(chmod 600 ~/.composer/auth.json),否则 Composer 会拒绝加载 - 确认没被项目级配置覆盖:运行
composer config github-oauth.github.com(不带-g)看是否返回空——如果有值,说明项目auth.json里写了别的 token,优先级更高 - 代理或企业防火墙可能拦截 token 请求:可临时加
-v参数跑composer install -v,看请求头里是否带了Authorization: Bearer ...
用 composer config 管理多个 GitHub 账号或实例
如果你同时维护多个 GitHub 账号(比如公司和个人),或混用 github.com + GitHub Enterprise,不能只靠一个 github-oauth.github.com 配置。
做法是:在 auth.json 里手动写多组域名映射,例如:
{
"github-oauth": {
"github.com": "xxx-personal-token",
"git.company.com": "yyy-company-token"
}
}
Composer 会自动按请求的域名匹配对应 token。注意这里键名必须是完整主机名(不含协议、端口、路径),且大小写敏感。
这种结构比反复 composer config -g 切换更可靠,也避免误把公司 token 写进个人全局配置里。
token 本身没绑定 IP 或设备,但一旦泄露就得立刻去 GitHub 后台 revoke——它等同于你的账号密码,只是权限更可控。










