在 .env 文件中使用私钥

IT技术 javascript reactjs environment-variables gatsby dotenv
2021-05-09 11:08:25

我在 gatsby.env文件中有一个多行私钥

GATSBY_GOOGLE_CLIENT_ID="12345"
GATSBY_GOOGLE_PRIVATE_KEY="-----BEGIN PRIVATE KEY-----\nflkdflkdf...\n-----END PRIVATE KEY-----"

在我的 gatsby-config 文件中,我有:

module.exports = {
    resolve: 'gatsby-source-google-sheets',
    options: {
        credentials: {
            "type": "service_account",
            "private_key": process.env.GATSBY_GOOGLE_PRIVATE_KEY,
            "client_id": process.env.GATSBY_GOOGLE_CLIENT_ID
        }
    }
}

client_id,因为它只是一个线串,但能正常工作private_key没有做的工作,大概是因为它是多线。

有没有办法解决这个问题?

谢谢

4个回答

您可以使用 string.replace 和下面的正则表达式来再次转义 \n 字符:

"private_key": process.env.GATSBY_GOOGLE_PRIVATE_KEY.replace(/\\n/g, '\n'),

我正在添加一种对我有用的手动方法。步骤1:

echo "PRIVATE_KEY=\"`sed -E 's/$/\\\n/g' my_rsa_2048_priv.pem`\"" >> .env

您在 .env 文件中的密钥将如下所示:

PRIVATE_KEY="-----BEGIN RSA PRIVATE KEY-----\n
dasdasdadasdasdasdasdasdasdasdadasdasdadasa\n
huehuauhhuauhahuauhauahuauhehuehuauheuhahue\n
-----END RSA PRIVATE KEY-----\n"

第 2 步。打印process.env.PRIVATE_KEY代码中的值将只显示第一行:-----BEGIN RSA PRIVATE KEY-----\n要解决此问题,请将变量编辑为.env一行。像这样:

PRIVATE_KEY="-----BEGIN RSA PRIVATE KEY-----\ndasdasdadasdasdasdasdasdasdasdadasdasdadasa\nhuehuauhhuauhahuauhauahuauhehuehuauheuhahue\n-----END RSA PRIVATE KEY-----\n"

现在process.env.PRIVATE_KEY将正确输出。

我有类似的问题,我必须阅读 .pem 文件内容。以下方法对我有用。

  • 将 .pem 内容转换为 base64 格式
  • 将转换后的 base64 内容(这将是单行字符串)放在 .env 文件中
  • 现在将 env 变量解码为原始内容

结果我的 .env 路径不正确。出于某种原因,其他密钥正在工作,但私钥却没有。

正确的设置:

require("dotenv").config({
    path: `./.env.${process.env.NODE_ENV}`,
});
const private_key = process.env.GATSBY_GOOGLE_PRIVATE_KEY.replace(/\\n/g, '\n');

module.exports = {
    resolve: 'gatsby-source-google-sheets',
    options: {
        credentials: {
            "private_key": private_key,
        }
    }
}