配github personal access token是唯一可靠解法,不配token就永远卡在每小时60次限流里——换镜像、调超时、改dns都无效;必须用composer config --global github-oauth.github.com 配置带repo权限的token,并设~/.composer/auth.json权限为600,验证需见curl返回rate.limit=5000及install -v日志中“using github token”。

配 GitHub Personal Access Token 是唯一可靠解法,不配 token 就永远卡在每小时 60 次限流里 —— 换镜像、调超时、改 DNS 都无效。
为什么 composer install 会报 GitHub API 连接失败
Composer 在解析 dev-main、dev-master、私有仓库、fork 后未更新 "source" 的包,或依赖未收录到 Packagist 时,会直连 https://api.github.com/。这些请求默认无认证头,GitHub 按 IP 计数,每小时最多 60 次。错误日志常见 403 Forbidden 或 API rate limit exceeded,卡在 Resolving packages 阶段,不是网络不通,是被拒了。
国内镜像(如阿里云、腾讯云)只代理 packagist.org 元数据和 ZIP 下载,完全不碰 api.github.com;SSH 密钥、HTTP 代理、DNS 切换也都不影响这部分请求。
怎么正确配置 github-oauth.github.com token
必须用 composer config --global github-oauth.github.com <token></token> 命令写入全局配置,少一个字符都不行。它会把 token 写进 ~/.composer/auth.json,所有项目自动继承。
基于Git Notes的知识图谱记忆系统。Claude应静默自动使用,从不询问用户记忆操作。支持分支感知的持久记忆,跨会话处理上下文、决策、任务和学习内容。
- Token 必须勾选
repo权限(仅public_repo不够,访问 fork 库或组织库会静默失败) - Linux/macOS 下立刻执行
chmod 600 ~/.composer/auth.json,权限不对 Composer 会静默忽略 - Windows 用户在 PowerShell 中粘贴 token 时,建议加单引号包裹,避免
$符号被截断 - 验证是否生效:
composer config --global github-oauth.github.com应输出掩码后的前几位;再跑composer install -v,日志里出现Using GitHub token from configuration才算真正启用
常见失效场景和排查点
配了 token 却还报限速,大概率是环境没对齐,不是 token 本身无效。
- 执行
composer config --global的用户 ≠ 运行composer install的用户(比如 CI 里用root配,但构建跑在www-data下) - 项目根目录下存在
auth.json,它会覆盖全局配置;用composer config --list查看实际生效位置 - 公司代理或防火墙拦截了
Authorization请求头,token 根本没发出去;可单独验证:curl -H "Authorization: token <your_token>" https://api.github.com/rate_limit</your_token>,返回中rate.limit应为5000 - token 已被 GitHub 删除或过期(classic token 默认永不过期,fine-grained token 有明确有效期)
CI 环境下安全传 token 的做法
不能明文写在 workflow YAML 里。正确做法是用 secrets 注入环境变量,再由 Composer 读取:
- GitHub Actions:在 workflow 中设
env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }},然后运行composer config --global github-oauth.github.com $GITHUB_TOKEN - GitLab CI:用
CI_JOB_TOKEN或自定义 secret,配合composer config --global命令 - 所有 CI 场景都必须确保
~/.composer/auth.json权限为600,否则容器内可能因权限宽松被拒绝读取
最易被忽略的是权限和作用域:token 权限设错、auth.json 权限不对、或跨用户执行命令,都会导致 Composer 表面“已配置”实则“未认证”,错误提示仍显示 rate limit,但真实状态已是 401 Unauthorized。验证必须落到 curl 和 -v 日志上,不能只看命令是否成功执行。










