【问题标题】:JSON in Environmental Variable on NetlifyNetlify 环境变量中的 JSON
【发布时间】:2019-03-08 08:26:31
【问题描述】:

我正在构建一个使用 ServiceAccountKey.json 进行 Firebase 身份验证的 AWS Lambda 函数。部署到 Netlify 时,我不想在 git 存储库中公开这些数据。有没有办法可以将整个 JSON 保存为环境变量

【问题讨论】:

    标签: git firebase deployment environment-variables netlify


    【解决方案1】:

    如果我没记错的话,您可以将 json 作为简单字符串存储在 env var 中。 否则,请查看jq,它允许您运行以从文件中读取 json 并将其直接存储在 env var 中。

    问候,

    【讨论】:

      【解决方案2】:

      免责声明:我在 Netlify 的支持团队工作。

      虽然先前关于 JSON 可以用作不嵌入回车的字符串的建议可能有效,但让环境变量包含引号字符可能有点困难,我见过的所有非平凡 JSON 都使用引号字符.两种不同的建议:

      1. 使用占位符创建字符串,并在构建期间将占位符替换为引号。我在这个例子中使用了@ 字符,所以你的“JSON”看起来像{@type@: @service_account...,然后你可以在你的构建中使用这样的东西:

      echo -e "${JSON_VARIABLE//@/\"}" > file.json && do_your_normal_build

      1. 您还可以创建一个返回它的函数(此处的文档:https://www.netlify.com/docs/functions/),如果需要,它甚至可以提供合理的 Content-Type HTTP 响应标头。

      【讨论】:

        【解决方案3】:

        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,});
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2023-04-01
          • 1970-01-01
          • 2020-08-28
          • 2018-12-15
          • 1970-01-01
          • 2020-11-04
          相关资源
          最近更新 更多