Username/password 在 Heroku 上为 React 应用程序启用基本身份验证时不被接受

Username/password not accepted when enabling basic authentication for React app on Heroku

我正在尝试使用 create-react-app buildpack, which includes the static buildpack 为部署到 heroku 的 React 应用程序启用基本身份验证。我成功启用了基本身份验证 - 我收到登录提示 - 但不接受我通过配置变量配置的用户名和密码。

这是我的配置:

static.json:

{
  "root": "build/",
  "routes": {
    "/**": "index.html"
  },
  "basic_auth": true
}

我在 heroku web ui 中设置了配置变量 BASIC_AUTH_USERNAMEBASIC_AUTH_PASSWORD。根据 static buildpack documentation,这应该会导致在部署期间在 app 目录中创建一个 .htpasswd 文件。

在控制台中,我看到环境变量已设置,但我可以看到 /app 目录中没有生成 .htpasswd 文件:

~ $ printenv
PWD=/app
NODE_ENV=development
NODE_HOME=/app/.heroku/node
HOME=/app
BASIC_AUTH_PASSWORD=mypassword
BASIC_AUTH_USERNAME=myusername
[...]

~ $ ls -a
.                   .env.production  bin           package-lock.json
..                  .gitignore       build         package.json
.buildpacks         .heroku          config        public
.env.development    .profile.d       logs          src
README.md           node_modules     static.json

部署日志文件未显示任何错误或警告:

[...]
=====> Downloading Buildpack: https://github.com/mars/create-react-app-inner-buildpack.git#v9.0.0
=====> Detected Framework: React.js (create-react-app)
       Using existing `static.json`
       Enabling runtime environment variables
=====> Downloading Buildpack: https://github.com/heroku/heroku-buildpack-static.git
=====> Detected Framework: Static HTML
-----> Installed nginx 1.19.0 to /app/bin
Using release configuration from last framework (Static HTML).
-----> Discovering process types
       Procfile declares types     -> (none)
       Default types for buildpack -> web
-----> Compressing...
       Done: 81M
-----> Launching...
       Released v22
       https://myapp.herokuapp.com/ deployed to Heroku 

如何找出没有生成 .htpasswd 文件的原因?或者是否有更好的方法来启用基本身份验证(无需在源代码中存储 username/password)?

我自己找到了答案here:

"BASIC_AUTH_PASSWORD 必须是您密码的哈希值。使用命令 openssl passwd -apr1 来哈希您的密码"