config.json不支持认证凭据,Composer仅从auth.json或COMPOSER_AUTH环境变量读取http-basic、github-oauth等字段;手动写入config.json会被静默忽略,导致401错误。

全局认证信息只能写进 auth.json,不能塞进 config.json —— 否则完全不生效,且报错时只显示 401,找不到原因。
为什么 config.json 里加 http-basic 没用
Composer 明确不读 config.json 里的认证字段。哪怕你手动编辑 ~/.composer/config.json,加上 "http-basic": {...},它也会静默忽略——既不报错,也不传凭据,composer install 直接卡在 401。
-
config.json只管非敏感行为:缓存路径、镜像源、超时、是否排序依赖等 - 所有凭据类配置(
http-basic、github-oauth、gitlab-token)必须走auth.json或环境变量 - 执行
composer config --global http-basic.example.com user pass,实际写入的是~/.composer/auth.json,不是config.json
composer config --global 是唯一安全的写入方式
手动编辑 auth.json 容易出格式错误,还可能把密码留在 shell 历史里。用命令行写最稳:
- 私有 Packagist / HTTP 仓库:
composer config --global http-basic.repo.example.com username password - GitHub 私有包:
composer config --global github-oauth.github.com "your_token_here"(注意引号,防空格截断) - GitLab 实例:
composer config --global gitlab-oauth.gitlab.internal.company "token" - 域名白名单(GitLab 多域):
composer config --global gitlab-domains '["gitlab.internal.company"]'(单引号包裹 JSON)
执行后 Composer 自动创建或更新 ~/.composer/auth.json,确保 JSON 合法、权限为 600。
权限和用户一致性常被忽略
CI/CD 或 Docker 环境下,auth.json 往往“写了却没用”,真正原因是运行 composer install 的用户跟写配置的用户不一致:
- 比如用
root执行composer config --global,但 CI runner 以www-data用户运行,读不到/root/.composer/auth.json -
auth.json权限必须是600(仅属主可读写),否则 Composer 拒绝加载 - 检查路径是否正确:
echo $COMPOSER_HOME;若为空,默认是~/.composer(Linux/macOS)或%APPDATA%\Composer(Windows)
真正生效的标志不是“文件存在”,而是 composer diagnose 输出中没有 auth 相关警告,且 composer install 能正常拉取私有包 —— 如果还报 401,先确认 auth.json 是否被目标用户可读,再查是否写进了错误的用户家目录。











