如何在Firebase托管上设置私有环境变量?

nrs*_*olf 10 firebase firebase-hosting

随着Divshot最近关闭,我已将许多应用程序切换到Firebase托管.其中一些应用程序连接到外部API,因此我需要一种方法来存储Firebase托管上的私有环境变量(例如,S3访问的密钥) - 任何人都有任何想法?这篇文章是https://www.firebase.com/blog/2015-10-29-managing-development-environments.html - 但这仅适用于非私有环境变量.

谢谢!

Dyl*_*lan 12

Firebase 托管无法存储私有环境变量。它仅用于静态托管。如果要使用私有变量,则需要在服务器端执行。

如果您想要一种“Firebase 方式”来处理机密,您可以使用 Firebase 云函数,并在云函数中设置一个环境变量。这是有关如何执行此操作的文档的链接:https : //firebase.google.com/docs/functions/config-env

如果您没有将云功能添加到您的 Firebase 托管,您可以通过 Firebase cli 工具添加:

firebase init functions
npm install --save firebase-functions@latest
npm install -g firebase-tools
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请访问:https : //firebase.google.com/docs/hosting/functions

为了在云函数中设置环境变量,您可以从命令行执行此操作,如下所示:

firebase functions:config:set someservice.key="THE API KEY" someservice.id="THE CLIENT ID"
Run Code Online (Sandbox Code Playgroud)

然后,您可以像这样从函数访问变量:

firebase init functions
npm install --save firebase-functions@latest
npm install -g firebase-tools
Run Code Online (Sandbox Code Playgroud)

  • 不回答OQ (6认同)
  • 在前端使用“firebase-functions”安全吗? (2认同)

a.f*_*iin 12

如果您希望使用 GitHub 操作部署到 Firebase,可以考虑.env在构建和部署之前创建变量。

只需在 GitHub 存储库设置下将环境变量设置为机密,然后在 中.github/workflows/{action}.yml添加此步骤

...
- name: Create env file
    run: |
      touch .env
      echo API_ENDPOINT=${{ secrets.API_ENDPOINT }} >> .env
      echo API_KEY=${{ secrets.API_KEY }} >> .env
      cat .env
...
Run Code Online (Sandbox Code Playgroud)

在您的代码库中,只需调用process.env.API_KEY即可使用该变量!

  • 请不要转发他人的答案。如果您认为这个问题是重复的,那么请将其标记为重复 (3认同)

erw*_*rdy 9

您可以尝试 Google 的Secret Manager API

这比将其存储为 Firebase Cloud Functions 中的环境变量更安全的原因是:

  1. Secret Manager API 强制执行最小权限原则。这意味着您可以限制对机密的访问,因此仅允许授权用户查看/编辑机密。
  2. 这些秘密使用 AES-256 进行加密。
  3. 您可以使用审核日志记录功能来检测异常情况。

有关源代码的更多示例,您可以在此处查看 Google Cloud 的 Secret Manager NPM 包文档。

希望有帮助!


Try*_*ace 8

基于这篇文章,我有一个适合我的解决方案: https://victorbruce82.medium.com/how-to-deploy-a-react-app-to- Different-firebase-hosting-environments-dev-and-产品-da3f4cae9a1e

它使用env-cmd,并且您不需要云函数来在当前运行的 firebase 托管站点上获取正确的环境变量(因为部署在 firebase 上时NODE_ENV总是返回production

基于使用两个独立的 firebase 项目,一个用于生产,一个用于开发。因此,添加第二个 firebase 项目后,用于开发:

使用以下命令将开发项目添加到当前项目:firebase use --add,并使用 alias dev

创建两个.env文件:.env.production每个.env.development文件都有一个变量,例如:

APP_ENV="production"
Run Code Online (Sandbox Code Playgroud)

development(在.env.development文件中将其更改为)

(您还可以将 API 密钥添加到这些 .env 文件中,确保.gitignore它们,这样您的代码库中就没有秘密)

现在,在您的代码中,您可以通过以下方式引用它process.env.APP_ENV

const websiteConfig = process.env.APP_ENV=== 'production' ? {
  themeColor: '#fff'
} : {
  themeColor: '#ccc'
}
Run Code Online (Sandbox Code Playgroud)

(您也可以选择APP_THEME_COLOR在 .env 文件中包含 a 并直接访问它,具体取决于您的偏好)

安装env-cmd

npm i -D env-cmd

现在将 2 个脚本添加到您的package.json

APP_ENV="production"
Run Code Online (Sandbox Code Playgroud)

现在,您可以将代码部署到两个不同的环境/域/主机,但也可以让它们使用不同的环境变量。

(注意:NODE_ENV在 .env 文件中使用不起作用,production部署在 firebase 托管上时它将始终返回)