Satis不处理认证,401错误源于Web服务器拦截且Composer不提示具体凭证问题:需确保auth.json域名与仓库URL完全匹配、放对路径并设600权限,Nginx须正确配置root和MIME类型。

必须用 HTTPS + 域名精确匹配的 auth.json,且 Satis 本身不处理权限——权限全靠前置 Web 服务器控制。
为什么 composer install 报 401 却没提示哪条凭证错了
Satis 是静态文件生成器,不带认证逻辑。所有访问控制得由 Nginx / Apache 实现,Composer 只负责把 auth.json 里的凭据塞进 HTTP Basic 头里发过去。一旦失败,它不会告诉你“是用户名错还是路径错”,只会静默 fallback 或报 401。
- 先确认 Web 服务是否真在拦截:手动
curl -u user:pass -I https://packages.internal/packages.json,看是否返回 200;如果直接 401,说明 Web 层没配好,别调 Composer -
auth.json的域名 key 必须和repositories.url的 host 完全一致——packages.internal和https://packages.internal/不行,packages.internal:8080和packages.internal也不行 - 字段只能是
http-basic,写成basic-auth或credentials全无效
auth.json 放哪、怎么写才生效
全局放 ~/.composer/auth.json(Linux/macOS)或 %APPDATA%\Composer\auth.json(Windows),权限必须是 600;项目级就放项目根目录,但要加进 .gitignore。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 内容结构固定:
{ "http-basic": { "packages.internal": { "username": "satis-user", "password": "satis-pass" } } } - 如果 Satis 前置了 Nginx 做 Basic Auth,这里填的就是 Nginx 的
auth_basic_user_file里定义的账号密码 - 别用
composer config --global http-basic.packages.internal ...—— 它会把凭据写进config.json,而 Satis 场景下必须走auth.json,否则不发头
Satis 静态包目录暴露时最容易漏的三件事
Nginx 配置不是贴个 root 就完事。Satis 生成的 packages.json 和 dist 文件,必须被正确识别为 JSON 和二进制流。
-
root必须精确指向satis.json里output-dir的子目录(通常是web/),例如:root /var/www/satis/web; - 必须显式声明 MIME 类型:
types { application/json json; application/x-gzip gz; application/x-tar tar; }否则packages.json返回text/plain,Composer 直接拒收 - 确保
packages.json文件权限是 644,且 Web 进程用户(如www-data)有读取权限;常见坑是php bin/satis build用 root 跑,生成的文件 www-data 读不了
CI 环境里怎么安全传凭据
不能把 auth.json 提交进 Git,也不能在脚本里 echo '{...}' > auth.json 明文泄露 token。
- 用
COMPOSER_AUTH环境变量,值是完整 JSON 字符串:COMPOSER_AUTH='{"http-basic": {"packages.internal": {"username":"u","password":"p"}}}' - GitHub Actions 中用
secrets.SATIS_AUTH注入,避免日志打印;GitLab CI 用variables+masked开关 - Docker 构建时,通过
--build-arg SATIS_AUTH=...传入,再在 Dockerfile 里ENV COMPOSER_AUTH=$SATIS_AUTH
真正卡住人的地方,从来不是 Satis 怎么 build,而是 Web 服务器返回的响应头对不对、auth.json 域名 key 和仓库 URL host 差了一个点或端口、或者 packages.json 被当成文本返回。这些细节一错,Composer 就静默跳过,连 warning 都不给。

















