认证失败主因是auth.json未被加载,而非composer拒绝;需检查路径、权限、编码、域名匹配及composer_auth格式合法性。

认证失败不是 Composer 拒绝你,而是它根本没把凭证送出去——auth.json 放错位置、权限不对、域名不匹配,都会导致静默 fallback 到未授权请求,最终返回 401 Unauthorized 或 Could not authenticate。
确认凭证是否真被加载
Composer 不会主动告诉你“没读到 auth.json”,只会报 401。先验证凭据是否生效:
- 运行
composer config --global --list | grep -E "(http-basic|github-oauth|gitlab-token)",如果无输出,说明全局配置里压根没写入凭证 - 若用项目级
auth.json,必须和composer.json在同一目录,且不能靠composer config命令写入——该命令只操作全局配置 -
composer diagnose会提示 “No authentication configured” 或列出已加载的域,比盲猜快得多
检查 auth.json 路径、权限与编码
路径错、权限松、编码怪,三者任一出问题,Composer 就直接跳过整个文件:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- Linux/macOS:必须是
~/.composer/auth.json,权限严格为600(chmod 600 ~/.composer/auth.json) - Windows:路径是
%APPDATA%\Composer\auth.json(注意是Composer文件夹,不是Composer后面带空格或小写) - 用
file -i ~/.composer/auth.json确认编码是charset=utf-8,不是utf-8-with-bom或us-ascii - GitLab 场景下,
gitlab-token的 key 必须和仓库 URL 完全一致:若 URL 是https://gitlab.internal:8080/myorg/pkg.git,key 就得是"gitlab.internal:8080",端口不能省、协议不能带
GitHub 私有库必须用 PAT,不能用密码
GitHub 已彻底停用密码认证,任何残留的密码配置都会失效:
- 在 GitHub Settings → Developer settings → Personal access tokens → Tokens (classic) 创建 token,勾选
repo权限 - 执行
composer config --global github-oauth.github.com YOUR-TOKEN-HERE,不要手写进auth.json - 确保
composer.json中仓库 URL 是 HTTPS 格式:"url": "https://github.com/username/private-repo.git",且"type": "vcs" - 如果用 SSH(
git@github.com:username/repo.git),就完全绕过auth.json,但需确保ssh -T git@github.com能通
CI/CD 中别硬编码,用 COMPOSER_AUTH 环境变量
CI 环境里手动放 auth.json 或改全局配置极不安全,也容易因缓存/权限失效:
- 把整个
auth.json内容 JSON 化后,作为环境变量注入:COMPOSER_AUTH='{"gitlab-token":{"gitlab.example.com":"xxx"}}' - Docker 构建时,可用
--build-arg COMPOSER_AUTH=...+ARG COMPOSER_AUTH+ENV COMPOSER_AUTH链路传递 - GitHub Actions 中,把 token 存为 secret,然后在 step 中用
env: { COMPOSER_AUTH: ${{ secrets.GITLAB_TOKEN }} }注入 - 注意:环境变量方式优先级高于磁盘上的
auth.json,且无需处理文件权限问题
最常被忽略的是域名匹配粒度和 COMPOSER_AUTH 的 JSON 格式合法性——少一个引号、多一个逗号、键名大小写错,CI 就静默失败,连错误日志都不报具体哪一行错。










