【发布时间】:2019-03-08 08:26:31
【问题描述】:
我正在构建一个使用 ServiceAccountKey.json 进行 Firebase 身份验证的 AWS Lambda 函数。部署到 Netlify 时,我不想在 git 存储库中公开这些数据。有没有办法可以将整个 JSON 保存为环境变量?
【问题讨论】:
标签: git firebase deployment environment-variables netlify
我正在构建一个使用 ServiceAccountKey.json 进行 Firebase 身份验证的 AWS Lambda 函数。部署到 Netlify 时,我不想在 git 存储库中公开这些数据。有没有办法可以将整个 JSON 保存为环境变量?
【问题讨论】:
标签: git firebase deployment environment-variables netlify
如果我没记错的话,您可以将 json 作为简单字符串存储在 env var 中。
否则,请查看jq,它允许您运行以从文件中读取 json 并将其直接存储在 env var 中。
问候,
【讨论】:
免责声明:我在 Netlify 的支持团队工作。
虽然先前关于 JSON 可以用作不嵌入回车的字符串的建议可能有效,但让环境变量包含引号字符可能有点困难,我见过的所有非平凡 JSON 都使用引号字符.两种不同的建议:
@ 字符,所以你的“JSON”看起来像{@type@: @service_account...,然后你可以在你的构建中使用这样的东西:echo -e "${JSON_VARIABLE//@/\"}" > file.json && do_your_normal_build
【讨论】:
Netlify 不会为您保存 JSON 文件,除非您将 netlify 函数用作下面提到的 @fool。但是您也不应该将带有 env 变量的 json 文件也保存到 Git 中。所以最好的方法是将你的 json 文件中的数据转换成一个对象并使用它:
.replace(/\\n/g, '\n')
这里以我的对象为例:
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,});
【讨论】: