Composer报Token过期实为认证凭据失效或配置未生效,主因是token被revoke、域名写错(如多写https://)、权限不足(如GitHub缺read:packages)或auth.json权限/路径错误;应删旧配置后用composer config --global --auth github-oauth.github.com重配。

Composer 报错 Token 过期,本质不是“过期”而是认证凭据失效或配置未生效,直接删 auth.json 或重置 http-basic 配置就能解决,不需要改环境变量或动 PHP 配置。
为什么报错说 Token 过期但实际没动过?
常见错误信息如 Invalid credentials、401 Unauthorized、Authentication failed,多出现在访问私有 Packagist、GitLab、GitHub Enterprise 等仓库时。这不是时间戳校验失败,而是:
- 你用的 token 已被手动 revoke(比如在 GitHub Settings → Developer settings → Personal access tokens 里删了)
-
auth.json里填的是旧密码,而仓库已强制启用双因素或切换为 token 登录 - 域名写错了:比如该写
gitlab.example.com却写了https://gitlab.example.com或gitlab.example.com/api/v4 - token 权限不足:GitHub token 缺少
read:packages或delete:packages,GitLab token 缺少apiscope
怎么快速验证并更新 http-basic 认证?
别手动编辑 auth.json,容易格式出错或暴露明文密码到 shell 历史。用 composer config 命令重置最稳妥:
- 项目级更新(写入当前目录
auth.json):composer config http-basic.packagist.example.com new-username new-token - 全局更新(写入
~/.composer/auth.json):composer config --global http-basic.packagist.example.com new-username new-token - 删掉旧配置再重试:
composer config --global --unset http-basic.packagist.example.com
执行后 Composer 自动校验 JSON 合法性,并跳过命令行历史记录密码——比手写安全得多。
GitHub OAuth token 必须写成 github.com?
是的,哪怕你用的是 GitHub Enterprise Server(比如 github.corp.example.com),auth.json 中的 key 仍必须是 "github.com",否则 Composer 完全不识别。正确结构如下:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
{
"github-oauth": {
"github.com": "ghp_xxx..."
}
}
同时,你得在 composer.json 的 config 段显式指定企业地址:
"config": {
"github-protocols": ["https"],
"github-url": "https://github.corp.example.com/api/v3/"
}
漏掉 github-url 就会继续走 public GitHub,导致 token 白配。
Token 更新后还是 401?重点检查这三处
很多同学更新完 token 就跑 composer update,结果还报错。真正卡点往往在:
-
auth.json文件权限:Linux/macOS 下若属主是root,当前用户读不到,用ls -l auth.json看;Windows 下注意文件是否被 IDE 锁住(比如 PhpStorm 正在监视该文件) - 镜像源干扰:如果你配置了阿里云镜像(
repo.packagist),它只代理包下载,不代理认证请求——私有仓库认证仍直连原域名,所以镜像配置对http-basic无效 - Git 配置冲突:某些 Git 客户端(如 VS Code 内置 Git)会把 token 写进
~/.git-credentials,Composer 有时会优先读那里,导致新auth.json被绕过;可临时运行git credential reject <<< "protocol=https<cr>host=packagist.example.com"清掉
Token 类型和域名映射关系极严格,差一个点、多一个协议头、少一个 scope,都会静默失败——别猜,用 composer config --global --list | grep http-basic 直接看 Composer 实际加载了什么。

















