执行composer config -g github-oauth.github.com返回空不代表未配置,因token默认加密存于~/.composer/auth.json(linux/macos)或%appdata%\composer\auth.json(windows),需直接查看该文件确认github-oauth字段及域名是否正确、权限是否为600、token是否具repo/public_repo权限。

composer config -g github-oauth.github.com 看不到值?
执行 composer config -g github-oauth.github.com 返回空,不代表密钥没配——它只显示明文配置项,而 GitHub Token 默认以加密方式存入全局 auth.json,不会回显。真正该查的是文件本身。
直接打开全局认证文件:
cat ~/.composer/auth.json(Linux/macOS)或
%APPDATA%\Composer\auth.json(Windows),确认结构类似:
{
"github-oauth": {
"github.com": "ghp_xxx..."
}
}
- 如果
github-oauth缺失或域名拼错(比如写成api.github.com),请求会 401 - Token 必须带
repo权限(私有库)或至少public_repo(公开库) - 旧版 Composer 1.x 不支持
ghp_*格式 Token,需用 classic token(已弃用,但某些老环境仍依赖)
composer install 报 “Could not fetch https://api.github.com/…”
这是最典型的密钥未生效表现,错误里常含 401 Unauthorized 或 rate limit exceeded(说明走的是未认证的匿名请求)。重点检查三处:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- Token 是否过期(GitHub personal access token 可设有效期,过期后需重生成)
- 是否在项目级
auth.json(./auth.json)里重复配置,导致覆盖全局设置 - Composer 版本:2.5+ 支持 fine-grained tokens,但必须勾选
Contents和Metadata权限;低于此版本只认 classic token - 执行
composer diagnose,它会主动检测认证状态并提示GitHub API is accessible或报错
为什么 composer create-project 能拉私有包却 install 失败?
行为不一致往往源于上下文差异:create-project 用的是当前 shell 用户的认证,而 install 可能被 CI 工具(如 GitHub Actions)以不同用户或无 home 目录环境运行,导致读不到 ~/.composer/auth.json。
- CI 中务必显式注入
COMPOSER_AUTH环境变量,值为 JSON 字符串:{"github-oauth":{"github.com":"ghp_..."}} - 本地测试时,用
sudo -u www-data composer install模拟 Web 服务器用户,看是否复现失败 - 避免混用
composer global config和手动编辑auth.json,前者可能写入错误路径(尤其 Windows 下权限问题)
用 curl 模拟 Composer 的 GitHub 请求验证密钥
绕过 Composer,直接测 Token 是否有效,最快定位是网络还是凭证问题:
curl -H "Authorization: Bearer ghp_xxx..." https://api.github.com/user/repos?per_page=1
返回 200 + JSON 列表即凭证可用;401 表示 Token 无效或权限不足;403 可能是组织 SSO 未授权该 Token。
- 注意:Composer 实际请求头是
User-Agent: Composer/2.x,但认证只依赖Authorization,所以 curl 测试足够可靠 - 若 curl 成功但 Composer 失败,大概率是
auth.json文件权限问题(如 600 以外的权限,Composer 2.2+ 会拒绝读取) - Windows 上用
type %APPDATA%\Composer\auth.json查看内容,别依赖图形编辑器隐藏字符(BOM、多余空格都会让解析失败)










