我正在开发实现某些第三方API的Gatsby应用,所有这些API都需要个人证书。稍后,我计划还添加一个数据库,因此也需要凭据。 由于我所有的代码都致力于GitHub,因此我正在寻找一种以安全的方式存储和访问它们的方法。
虽然我尚未部署我的应用程序,但该解决方案应同时适用于本地开发和生产。
我想提一下,过去我从未(也没有机会)解决过类似的问题,因此,我什至不知道在哪里寻找或应该寻找解决该问题的方法
答案 0 :(得分:4)
您需要使用环境变量。
以下是它的盖茨比文档:https://www.gatsbyjs.org/docs/environment-variables/
简而言之,您将使用开发环境变量创建一个.env.development
文件,并为您的产品环境创建一个.env.production
文件。
然后,在gatsby-config.js
的开头,添加以下内容:
require("dotenv").config({
path: `.env.${process.env.NODE_ENV}`,
})
请注意,您不必安装dotenv
,它已经是Gatsby依赖项了。
然后,为避免将您的.env
文件提交到GitHub,请将它们添加到.gitignore
中:
# ignore env variables files
.env*
最后一步,您需要将变量手动添加到正在使用的每个需要构建站点的服务中。通常,这将是您的主机(例如,Netlify)和CI(例如,GitHub Actions)。
答案 1 :(得分:0)
JakobAttk是正确的...如果您不使用服务器或无服务器功能来将获取的数据提供给客户端,那么每个人(具有一些开发控制台的知识)都可以看到API密钥。 就像1,2,3一样简单...您只需要在DEV-Tools中打开network-tab并寻找xhr连接。找出从API提取的内容,并检查请求发送的标头的值。
如果您不想(而且永远不要这样做!)将敏感数据放在git存储库中,则ENV变量很好,但是它们在运行时并未完全隐藏。
至少,到api服务的最后一英里会保留其凭据,因此请不要对敏感的API密钥使用不安全的客户端连接。如果您的API服务具有其他Security-Laywr(例如,检查引荐来源网址IP),则可能没问题。