composer提示Token过期本质是本地缓存的gitHub OAuth token失效,需重生成classic token并配置:访问https://www.php.cn/link/9c450eb90c31bc12f1691f235da5a0cc,勾选repo和read:packages,执行composer config -g github-oauth.github.com 。

Composer 提示 token has expired,本质是它缓存的 GitHub OAuth token 失效了,不是 Composer 本身出问题,而是你本地保存的 GitHub 访问凭据过期或被撤销。重新生成并配置 token 即可解决,不需要重装 Composer 或改全局配置。
为什么 GitHub token 会过期
GitHub 的 personal access token 默认没有过期时间,但以下情况会导致失效:
- 你在 GitHub Settings → Developer settings → Personal access tokens 页面手动 revoke 了该 token
- 你启用了 GitHub 的 fine-grained tokens,而这类 token 默认有有效期(如 30 天、90 天),且不支持
repo全权限(Composer 需要读取私有仓库) - 你使用的是旧版
classic token,但 GitHub 已强制要求启用 2FA 后必须用新 token 替换(尤其 2023 年后) - Composer 缓存中残留了已失效的 token,且未自动更新
生成新的 classic token 并授权给 Composer
必须用 classic token(不是 fine-grained),且至少勾选 repo 权限(私有库)和 read:packages(如果用 GitHub Packages)。
- 访问 https://www.php.cn/link/9c450eb90c31bc12f1691f235da5a0cc
- Token description 填
composer-auth方便识别 - 勾选
repo(必需)、read:packages(按需)、delete:packages(按需) - 点击 Generate token,页面跳转后立即复制该 token(只显示一次!)
- 执行命令写入 Composer 配置:
composer config -g github-oauth.github.com
验证 token 是否生效 & 排查常见失败点
运行 composer diagnose 看是否还有 token has expired 提示;若仍有问题,检查以下几点:
- 确认 token 是
classic类型:在 https://www.php.cn/link/f4380fd29ac34f2610014e8361d088fb 页面,有效 token 应显示Classic标签,而非Fine-grained - 确认没有多余空格:执行
composer config -g github-oauth.github.com查看当前值,前后不能有空格或换行 - 确认域名拼写:必须是
github.com,不是api.github.com或www.github.com - 私有仓库依赖若走
git@github.com:ssh 地址,不会走 token 验证——此时应检查 SSH key 是否添加到 GitHub,而非修 token
最易忽略的是用了 fine-grained token 还以为能替代 classic token。GitHub 明确不支持 fine-grained token 用于 Composer 的 github-oauth 配置,哪怕权限全开也不行。必须回退到 classic token 才能通过 Composer 认证。