Composer报Invalid credentials是Git凭据管理器存了过期/错误账号密码,非密码输错或Composer配置问题;需清理系统凭据(Windows凭据管理器、macOS钥匙串、Linux git credential reject),或临时禁用credential.helper调试。

Composer报Invalid credentials不是密码输错了
这是 Git 凭据管理器存了过期/错误的账号密码,不是 Composer 配置问题。Composer 调用 git clone 时,Git 会静默复用系统凭据管理器里缓存的凭证,哪怕你刚在 Composer 里配了新 token,它也根本不用。
验证方法:从 composer install -vvv 日志里复制出实际执行的 git clone 命令,在终端里手动跑一遍——如果同样失败,就是 Git 凭据的问题。
- Windows:打开“Windows 凭据管理器” → “普通凭据”,删掉所有含
github.com、gitlab.com、your-gitlab.internal的条目 - macOS:打开“钥匙串访问”,搜索对应域名,删掉类型为 “internet password” 的记录
- Linux(GNOME):运行
git credential reject,然后输入protocol=https、host=gitlab.example.com、空行结束 - 临时保险:执行
git config --global --unset credential.helper,让 Git 不再自动填密码(调试用)
auth.json 写对了但还是 401
常见原因是文件路径、权限或编码不合规,Composer 直接跳过加载,等同于没配。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
- 路径必须是:
~/.composer/auth.json(Linux/macOS)或%APPDATA%\Composer\auth.json(Windows),项目级则必须和composer.json同目录 - Linux/macOS 权限必须是
600:chmod 600 ~/.composer/auth.json,否则 Composer 忽略该文件 - 确认编码是 UTF-8(不含 BOM):
file -i ~/.composer/auth.json输出应含charset=utf-8 - 域名必须完全匹配仓库 URL:若仓库是
https://gitlab.internal:8080/myorg/pkg.git,auth.json中http-basic的 key 就得是"gitlab.internal:8080",端口不能省、不能写成gitlab.internal
GitHub 私仓用 HTTPS 报错,别再试密码
GitHub 已停用密码认证,必须用 Personal Access Token(PAT),且需带 repo 权限。
- 生成 PAT:Settings → Developer settings → Personal access tokens → Tokens (classic) → Generate new token → 勾选
repo - 写入配置:
composer config --global github-oauth.github.com YOUR_TOKEN_HERE(注意域名是github.com,不是api.github.com或带 www) - 确保
composer.json中仓库 URL 是 HTTPS 格式:"url": "https://github.com/username/private-repo.git",且"type": "vcs" - 如果用了
dev-main这类开发分支,必须在composer.json里显式加"minimum-stability": "dev",否则 Composer 默认过滤掉
CI 环境里凭据始终不生效
CI 中绝不能硬编码 token 到脚本或 auth.json,也不能依赖全局配置——COMPOSER_AUTH 环境变量是唯一可靠方式。
- 格式必须是合法 JSON 字符串,例如:
{"http-basic":{"gitlab.example.com":{"username":"ci-bot","password":"${{ secrets.GITLAB_TOKEN }}"}}} - GitHub Actions 中,直接在 job step 里设:
COMPOSER_AUTH: ${{ secrets.COMPOSER_AUTH }},其中COMPOSER_AUTH是预设的 secret(值为上面那个 JSON) - GitLab CI 中,用
variables:定义COMPOSER_AUTH,注意 YAML 里 JSON 要用单引号包裹防止解析错误 - 不要在 CI 脚本里运行
composer config --global—— runner 用户环境隔离,该命令写入的是临时容器的 home,不可靠
最常被忽略的一点:私有包自身 composer.json 里的 name 字段(如 "myorg/pkg")必须和你在项目 require 中写的**完全一致**——大小写、斜杠、vendor 名,一个字符都不能差。这个校验发生在 Composer 解析阶段,跟认证无关,但报错看起来像权限问题。

















