JSON 在 Netlify 的环境变量中
JSON in Environmental Variable on Netlify
我正在构建一个使用 ServiceAccountKey.json
进行 Firebase 身份验证的 AWS Lambda 函数。部署到 Netlify 时,我不想在 git 存储库中公开此数据。有什么方法可以将整个JSON保存为环境变量?
如果我没记错的话,您可以将 json 作为一个简单的字符串存储在环境变量中。
否则请查看 jq
,它允许您 运行 从文件中读取 json 并将其直接存储在环境变量中。
此致,
免责声明:我在 Netlify 的支持团队工作。
虽然先前的建议 JSON 可以用作不带回车符的字符串 returns 嵌入可能有效,但让环境变量包含引号字符可能有点挑战,这都是non-trivialJSON我见过用的。以不同方式执行此操作的两个不同建议:
- 改为使用占位符创建字符串,并在构建期间用引号替换占位符。我在这个例子中使用
@
字符,所以你的 "JSON" 看起来像 {@type@: @service_account...
,然后你可以在你的构建中使用这样的东西:
echo -e "${JSON_VARIABLE//@/\"}" > file.json && do_your_normal_build
- 您还可以创建一个函数(此处的文档:https://www.netlify.com/docs/functions/)returns 它甚至可以在需要时提供合理的 Content-Type HTTP 响应 header。
Netlify 不会为您保存 JSON 文件,除非您将 netlify 函数用作下面提到的 @fool。但是你不应该将带有 env 变量的 json 文件也保存到 Git 中。所以最好的方法是将 json 文件中的数据转换成一个对象并使用它:
- 将 JSON 中的数据转换为对象。
- 然后我们的新对象可以使用 .env 变量,(您还需要 dotenv 以防万一)
- 将对象(例如 serviceAccount)直接注入到需要它的函数中。
- 我在执行上述步骤时遇到的秘密错误是其中一个 .env 变量有一个“\n”,当变成一个字符串时变成“\\n”-> 错误消息并没有真正说明你说这就是问题所在。
- 因此您需要将其添加到该变量
.replace(/\n/g, '\n')
- 对于开发,您有 .env 文件
- 对于生产,你只需在 netlify 中正常地一个一个地添加 env 变量
这里以我的对象为例:
require('dotenv').config();
module.exports = {
FIREBASE_KEY: {
type: process.env.REACT_APP_SAK_TYPE,
project_id: process.env.REACT_APP_SAK_PROJECT_ID,
private_key_id: process.env.REACT_APP_SAK_PRIVATE_KEY_ID,
private_key: process.env.REACT_APP_SAK_PRIVATE_KEY.replace(/\n/g, '\n'),
client_email: process.env.REACT_APP_SAK_CLIENT_EMAIL,
client_id: process.env.REACT_APP_SAK_CLIENT_ID,
auth_uri: process.env.REACT_APP_SAK_AUTH_URI,
token_uri: process.env.REACT_APP_SAK_TOKEN_URI,
auth_provider_x509_cert_url: process.env.REACT_APP_SAK_AUTH_PROVIDER_X509_CERT_URL,
client_x509_cert_url: process.env.REACT_APP_SAK_X509_CERT_URL,
},
FIREBASE_DB: process.env.REACT_APP_FB_DATABASE_URL,
};
以及使用按键的相应函数:
const config = require('./config');
const serviceAccount = config.FIREBASE_KEY;
firebaseAdmin.initializeApp({ credential: firebaseAdmin.credential.cert(serviceAccount), databaseURL: config.FIREBASE_DB,});
我正在构建一个使用 ServiceAccountKey.json
进行 Firebase 身份验证的 AWS Lambda 函数。部署到 Netlify 时,我不想在 git 存储库中公开此数据。有什么方法可以将整个JSON保存为环境变量?
如果我没记错的话,您可以将 json 作为一个简单的字符串存储在环境变量中。
否则请查看 jq
,它允许您 运行 从文件中读取 json 并将其直接存储在环境变量中。
此致,
免责声明:我在 Netlify 的支持团队工作。
虽然先前的建议 JSON 可以用作不带回车符的字符串 returns 嵌入可能有效,但让环境变量包含引号字符可能有点挑战,这都是non-trivialJSON我见过用的。以不同方式执行此操作的两个不同建议:
- 改为使用占位符创建字符串,并在构建期间用引号替换占位符。我在这个例子中使用
@
字符,所以你的 "JSON" 看起来像{@type@: @service_account...
,然后你可以在你的构建中使用这样的东西:
echo -e "${JSON_VARIABLE//@/\"}" > file.json && do_your_normal_build
- 您还可以创建一个函数(此处的文档:https://www.netlify.com/docs/functions/)returns 它甚至可以在需要时提供合理的 Content-Type HTTP 响应 header。
Netlify 不会为您保存 JSON 文件,除非您将 netlify 函数用作下面提到的 @fool。但是你不应该将带有 env 变量的 json 文件也保存到 Git 中。所以最好的方法是将 json 文件中的数据转换成一个对象并使用它:
- 将 JSON 中的数据转换为对象。
- 然后我们的新对象可以使用 .env 变量,(您还需要 dotenv 以防万一)
- 将对象(例如 serviceAccount)直接注入到需要它的函数中。
- 我在执行上述步骤时遇到的秘密错误是其中一个 .env 变量有一个“\n”,当变成一个字符串时变成“\\n”-> 错误消息并没有真正说明你说这就是问题所在。
- 因此您需要将其添加到该变量
.replace(/\n/g, '\n')
- 对于开发,您有 .env 文件
- 对于生产,你只需在 netlify 中正常地一个一个地添加 env 变量
这里以我的对象为例:
require('dotenv').config();
module.exports = {
FIREBASE_KEY: {
type: process.env.REACT_APP_SAK_TYPE,
project_id: process.env.REACT_APP_SAK_PROJECT_ID,
private_key_id: process.env.REACT_APP_SAK_PRIVATE_KEY_ID,
private_key: process.env.REACT_APP_SAK_PRIVATE_KEY.replace(/\n/g, '\n'),
client_email: process.env.REACT_APP_SAK_CLIENT_EMAIL,
client_id: process.env.REACT_APP_SAK_CLIENT_ID,
auth_uri: process.env.REACT_APP_SAK_AUTH_URI,
token_uri: process.env.REACT_APP_SAK_TOKEN_URI,
auth_provider_x509_cert_url: process.env.REACT_APP_SAK_AUTH_PROVIDER_X509_CERT_URL,
client_x509_cert_url: process.env.REACT_APP_SAK_X509_CERT_URL,
},
FIREBASE_DB: process.env.REACT_APP_FB_DATABASE_URL,
};
以及使用按键的相应函数:
const config = require('./config');
const serviceAccount = config.FIREBASE_KEY;
firebaseAdmin.initializeApp({ credential: firebaseAdmin.credential.cert(serviceAccount), databaseURL: config.FIREBASE_DB,});