必须执行composer config bitbucket-oauth.bitbucket.org <app-password>,这是Composer 2+唯一有效的Bitbucket认证方式;它强制校验bitbucket.org域名、要求个人账号生成的含Repositories: Read权限的App Password,并自动安全写入auth.json且设600权限;同时composer.json中须声明"type": "vcs"及以.git结尾的完整仓库URL,包名须与私有库composer.json中name字段严格一致。

必须执行 composer config bitbucket-oauth.bitbucket.org <app-password>,否则所有私有包拉取都会卡在 Could not fetch https://api.bitbucket.org/2.0/repositories/ 或直接 403 —— 这不是可选项,是 Composer 2+ 唯一认的认证入口。
为什么 bitbucket-oauth 是强制项,http-basic 不再生效
Composer 2+ 彻底移除了对 http-basic.bitbucket.org 的支持,也废弃了旧版 OAuth consumer。现在只解析 bitbucket-oauth.bitbucket.org 这一配置项,且内部做了三件事:校验域名是否为严格 bitbucket.org(不接受 www.bitbucket.org、api.bitbucket.org 或带协议前缀)、强制要求 App Password 格式、自动写入 auth.json 并设权限为 600。手写 auth.json 容易字段错位或权限不对,导致静默跳过认证。
- 执行命令时域名必须写成
bitbucket.org,不能加https://或路径 - App Password 必须由你本人的 Bitbucket 账号生成(不能用团队账号),且至少勾选
Repositories: Read - 验证是否写入成功:运行
composer config --auth --list | grep bitbucket
composer.json 里仓库声明必须满足三个硬性条件
即使 auth.json 配对了,只要 composer.json 里漏掉任意一条,Composer 就当普通公开包处理,完全不触发认证流程。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
-
"type": "vcs"必须显式写出,不能留空、不能写成"package"或"git" -
"url"必须是完整 Git 克隆地址,以.git结尾,例如"https://bitbucket.org/vendor/package.git";填网页地址或少.git后缀会直接 404 - 包名(如
"vendor/package")必须和私有仓库中composer.json的name字段完全一致,包括大小写
App Password 怎么生成才真正可用
Bitbucket 的 App Password 页面只显示一次明文,关掉就再也看不到——绝大多数“配了没用”的问题,其实只是复制不全、用了已撤销的 token,或权限没勾对。
- 入口路径:右上头像 → Personal settings → App passwords → Create app password
- 名称随意(如
composer-read-private),但权限至少勾选Repositories: Read;Account: Read可选,但部分旧版 Composer 会校验它 - 生成后立刻复制保存到安全地方;如果看到
This app password has been revoked,说明已被删或重生成,必须换新的 - 别用 Workspace 级别的 App Password —— Composer 按 token 绑定的用户身份校验权限,不看组织关系
调试时最容易忽略的三个点
很多报错表面是认证失败,实际是缓存、作用域或路径搞错了。
- 运行
composer clear-cache,否则 Composer 可能复用旧的未授权请求头 - CI 环境(如 GitHub Actions)默认写的是本地用户目录,需显式加
--global,或用COMPOSER_AUTH环境变量注入 JSON 字符串 - Bitbucket Server(自建版)不支持
bitbucket-oauth,得走http-basic+ Basic Auth,千万别混用
最常被跳过的其实是 URL 末尾的 .git 和 repositories 里的 "type": "vcs" —— 它们不报语法错误,但会让整个认证流程彻底失效,连日志里都看不到 Authorization 头。

















