随着Divshot最近关闭,我已将许多应用程序切换到Firebase托管。其中一些应用程序连接到外部API,因此我需要一种方法来存储Firebase托管上的私有环境变量(例如,S3访问的密钥) - 任何人都有任何想法?有这篇文章 - https://www.firebase.com/blog/2015-10-29-managing-development-environments.html - 但这只适用于非私有环境变量。
谢谢!
答案 0 :(得分:2)
您可以使用Firebase Cloud Functions设置环境变量。这是有关如何执行此操作的文档的链接: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
有关此内容的更多信息:https://firebase.google.com/docs/hosting/functions
要在云功能中设置环境变量,您可以从命令行进行设置,如下所示:
firebase functions:config:set someservice.key="THE API KEY" someservice.id="THE CLIENT ID"
然后您可以通过如下函数访问变量:
const functions = require('firebase-functions');
const request = require('request-promise');
exports.userCreated = functions.database.ref('/users/{id}').onWrite(event => {
let email = event.data.child('email').val();
return request({
url: 'https://someservice.com/api/some/call',
headers: {
'X-Client-ID': functions.config().someservice.id,
'Authorization': `Bearer ${functions.config().someservice.key}`
},
body: {email: email}
});
});
答案 1 :(得分:1)
您可以尝试使用Google的Secret Manager API。
与将其存储为Firebase Cloud Functions中的环境变量相比,其安全性更安全的原因是:
有关源代码的更多示例,您可以查看Google Cloud的Secret Manager NPM软件包文档here。
希望有帮助!
答案 2 :(得分:0)
根据这篇文章,我有一个适合我的解决方案: https://victorbruce82.medium.com/how-to-deploy-a-react-app-to-different-firebase-hosting-environments-dev-and-prod-da3f4cae9a1e
它使用 env-cmd
,并且您不需要云函数来在当前运行站点的 Firebase 托管上获取正确的环境变量(因为 NODE_ENV
总是返回 {{1} } 部署在 firebase 上时)
基于使用两个独立的 firebase 项目,一个用于生产,一个用于开发。所以在添加第二个 firebase 项目后,用于开发:
将开发项目添加到您当前的项目:production
,并使用别名 firebase use --add
。
创建两个 dev
文件:.env
和 .env.production
,每个文件都有一个变量,例如:
.env.development
(在 .env.development 文件中将其更改为 APP_ENV="production"
)
(您还可以将 API 密钥添加到这些 .env 文件中,确保您development
它们,这样您的代码库中就没有秘密)
现在在您的代码中,您可以使用 .gitignore
引用它:
process.env.APP_ENV
(您也可以选择在 .env 文件中添加 const websiteConfig = process.env.APP_ENV=== 'production' ? {
themeColor: '#fff'
} : {
themeColor: '#ccc'
}
并直接访问它,具体取决于您的偏好)
安装APP_THEME_COLOR
env-cmd
现在向您的 npm i -D env-cmd
添加 2 个脚本:
package.json
现在您可以将代码部署到两个完全不同的环境中,但也可以让它们具有不同的环境变量。
(注意:在您的 .env 文件中使用 "build:dev":"env-cmd -f .env.development npm run build && firebase deploy -P dev",
"build:prod":"env-cmd -f .env.production npm run build && firebase deploy -P prod"
不起作用,部署在 Firebase 托管上时它总是会返回 NODE_ENV
)