应配置 GitHub Personal Access Token 并通过 composer config --global github-oauth.github.com 写入,确保 Token 具备 repo 权限、未被镜像绕过、缓存已清除,且存储于 auth.json 而非环境变量。

Composer 请求 GitHub API 被 403 拒绝怎么办
直接原因是未认证或认证失效,GitHub 对未认证请求限流极严(60 次/小时),而 Composer 默认走匿名请求。哪怕你本地 git clone 正常,composer install 仍可能卡在 Fetching github.com 并报 403 Forbidden 或 API rate limit exceeded。
- 检查是否真被限流:运行
curl -i https://api.github.com/rate_limit,看响应头里X-RateLimit-Remaining是否为 0 - 不要改
composer.json里的repositories地址——那不解决认证问题 - Token 必须带
repo权限(不是public_repo就够),否则私有库或 fork 仓库仍会失败
怎么让 Composer 用 Personal Access Token 认证 GitHub
核心是把 Token 注入到 Composer 的 GitHub 配置中,不是塞进 Git 凭据或环境变量里就完事。Composer 自己维护一套 OAuth 认证凭据,靠 composer config 写入全局或项目级配置。
- 生成 Token:GitHub Settings → Developer settings → Personal access tokens → Generate new token → 勾选
repo(必须),可选delete_repo(仅需删库时) - 写入配置:
composer config --global github-oauth.github.com <your_token_here> - 验证是否生效:
composer config --global --list | grep github-oauth,应看到脱敏后的 token 哈希 - 如果只对单个项目生效,去掉
--global,并在项目根目录下执行(注意:该配置会写入项目composer.json的config字段,慎用于公开仓库)
为什么用了 Token 还报 403 或超限
常见不是 Token 本身错,而是 Composer 在多层代理或缓存场景下没走认证通道。尤其当你用 packagist.org 镜像、自建 Satis、或启用了 http-basic 认证时,GitHub 请求可能被绕过或降级。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 确认没启用镜像:检查
composer config --list中repositories.packagist.org是否为{"type": "composer", "url": "https://packagist.org"},而非国内镜像 URL(镜像通常不转发 GitHub 认证头) - 禁用 GitHub API 回退:设置
composer config --global github-protocols https,避免 Composer 在 HTTPS 失败后自动切到无认证的 git:// 协议 - 清除旧缓存:
composer clear-cache,否则 Composer 可能复用之前未认证的元数据缓存,导致后续请求仍走限流路径 - CI 环境要特别注意:GitHub Actions 默认注入
GITHUB_TOKEN,但它作用域受限,不能用于跨组织访问;建议用secrets.MY_GITHUB_TOKEN并显式配置
Token 存在哪?能不能用环境变量替代
Composer 把 Token 存在 auth.json 里,默认位置是 COMPOSER_HOME/auth.json(Linux/macOS 是 ~/.composer/auth.json,Windows 是 %APPDATA%\Composer\auth.json)。它不读取 GITHUB_TOKEN 或 GH_TOKEN 环境变量——那是 Git CLI 或其他工具用的。
- 手动编辑
auth.json也行,但格式必须严格:{"github-oauth": {"github.com": "xxx..."}} - 别把 Token 提交进 Git:
auth.json默认在.gitignore里,但如果你用项目级配置(即没加--global),它会进composer.json,必须删掉再重配 - CI 中推荐用
composer config --global+ secrets 注入,而不是挂载整个auth.json文件——前者更可控,后者容易权限泄露
Token 权限和存储位置这两个点,最容易在迁移或 CI 配置时漏掉。一但出问题,现象就是“明明配了却还是 403”,其实只是 Composer 根本没拿到它。

















