Divshot最近关闭了,我已经把一些应用程序切换到了Firebase托管。其中一些应用程序连接到外部API,所以我需要一种方法来在Firebase托管上存储私有环境变量(例如,用于S3访问的密钥)-有人有什么想法吗?有这篇文章-https://www.firebase.com/blog/2015-10-29-managing-development-environments.html-但这只针对非私有环境变量。
谢谢!
Divshot最近关闭了,我已经把一些应用程序切换到了Firebase托管。其中一些应用程序连接到外部API,所以我需要一种方法来在Firebase托管上存储私有环境变量(例如,用于S3访问的密钥)-有人有什么想法吗?有这篇文章-https://www.firebase.com/blog/2015-10-29-managing-development-environments.html-但这只针对非私有环境变量。
谢谢!
7条答案
按热度按时间5hcedyr01#
Firebase主机不能存储私有环境变量。它只用于静态主机。如果你想使用私有变量,你需要在服务器端使用。
如果你想要一个“Firebase方式”来处理机密,你可以使用Firebase云函数,并在云函数中设置一个环境变量。这里是如何操作的文档链接:https://firebase.google.com/docs/functions/config-env
如果您的Firebase主机没有添加云功能,您可以通过Firebase cli工具添加:
更多信息请点击这里:https://firebase.google.com/docs/hosting/functions
为了在云函数中设置环境变量,您也可以从命令行这样做:
然后,您可以从函数访问变量,如下所示:
c8ib6hqw2#
你可以试试谷歌的Secret Manager API。
这比将其作为环境变量存储在Firebase云函数中更安全的原因是:
1.使用AES-256对机密进行加密。
1.有一个审计日志记录功能可用于异常检测。
有关源代码的更多示例,您可以查看Google Cloud的Secret Manager NPM包文档here。
希望能有所帮助!
vawmfj5a3#
如果您希望使用GitHub操作部署到Firebase,可以考虑在构建和部署之前创建
.env
变量。只需在GitHub存储库设置下将环境变量设置为secret,然后在
.github/workflows/{action}.yml
中添加以下步骤在代码库中,只需调用
process.env.API_KEY
即可使用该变量!uqdfh47h4#
基于这篇文章,我有一个适合我的解决方案:https://victorbruce82.medium.com/how-to-deploy-a-react-app-to-different-firebase-hosting-environments-dev-and-prod-da3f4cae9a1e
它使用
env-cmd
,并且您不需要cloud-function来获取当前firebase上的正确env变量,firebase是运行站点的主机(因为当部署在firebase上时,NODE_ENV
总是返回production
)基于使用两个单独的firebase项目,一个用于生产,一个用于开发。因此,添加第二个firebase项目后,用于开发:
使用以下命令将开发项目添加到当前项目:
firebase use --add
,并使用别名dev
。创建两个
.env
文件:.env.production
和.env.development
,每个变量如下所示:(在.env.开发文件中将其更改为
development
)(You我也可以向这些.env文件添加API密钥,确保您
.gitignore
它们,这样您的代码库中就没有秘密了)现在,在代码中,您可以使用
process.env.APP_ENV
引用此函数:(You也可以选择在.env文件中包含
APP_THEME_COLOR
,并根据您的偏好直接访问它)安装
env-cmd
npm i -D env-cmd
现在向您的
package.json
添加2个脚本:现在,您可以将代码部署到两个完全不同的环境中,但也可以让它们具有不同的环境变量。
(Note:在.env文件中使用
NODE_ENV
不起作用,当部署在firebase主机上时,它将始终返回production
)dzjeubhm5#
要将.env或环境值添加到firebase托管,请执行以下步骤:
1.转到Google云帐户https://cloud.google.com/
1.选择与您在firebease中托管的项目相同的项目。
1.转到服务
cloud function
1.找到您的服务,然后单击
edit
,您可以添加env变量和build变量。1.(可选)您可以看到生成文件,可以添加/编辑.env文件
eyh26e7m6#
为了使React能够通过process.env访问这些环境变量,请以REACT_APP_作为环境变量名的开头
6mw9ycah7#
从2023年起,对于大多数API访问密钥,您应该使用secrets而不是config:
复制粘贴您的秘密到控制台。
然后在函数中,可以使用以下命令访问它
有关详细信息,请参阅Firebase官方文档