通过 GitHub 分支跟踪将带有 dash_auth 的 Dash 应用程序部署到 Heroku

Deploy Dash app with dash_auth to Heroku through GitHub branch tracking

我正在使用 basic authentication dash_auth 构建 Dash 应用程序。不幸的是,这需要对用户名和密码字典进行硬编码。这不是一个大问题,因为该应用程序仅供室内使用。

现在我们想通过自动跟踪 GitHub 存储库的一个分支来将其部署到 Heroku,因为这似乎最方便。问题是这需要我们将硬编码密码也放入 Github 存储库中。

建议对令牌和客户端密钥使用环境变量,但我应该如何对密码字典执行此操作?

我也愿意接受其他解决方案。

谢谢

使用字典执行此操作并没有真正改变。您只需要将 JSON 字符串解析为 Python 数据结构。

在您的应用程序中,而不是 hard-coding 文档中显示的字典:

VALID_USERNAME_PASSWORD_PAIRS = {
    'hello': 'world'
}

从环境中提取,例如像这样:

import json
import os


VALID_USERNAME_PASSWORD_PAIRS = json.loads(os.getenv("VALID_USERNAME_PASSWORD_PAIRS"))

然后将您的用户名设置为 Heroku 配置变量:

heroku config:set VALID_USERNAME_PASSWORD_PAIRS='{"hello": "world"}'

此处的单引号应避免大多数特殊字符被您的 shell 解释的问题。

对于本地开发,您可以设置一个 VALID_USERNAME_PASSWORD_PAIRS 环境变量,例如通过 .env 文件,如果您使用的工具可以理解该文件。

本地开发的另一种选择是 hard-code 通过添加 default 参数将默认值添加到脚本中:

VALID_USERNAME_PASSWORD_PAIRS = json.loads(
    os.getenv("VALID_USERNAME_PASSWORD_PAIRS", default='{"local": "default"}')
)

请注意,我们在这里给 default 一个 string,而不是字典,因为我们将结果传递给 json.loads()

请谨慎使用最后一个选项,因为您可能会在不设置环境变量的情况下意外发布代码,在这种情况下,本地默认凭据将起作用。