在.env文件中使用私钥

时间:2019-04-01 16:19:25

标签: javascript reactjs environment-variables gatsby dotenv

我在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不起作用,大概是因为它是多行。

有办法解决这个问题吗?

谢谢

7 个答案:

答案 0 :(得分:5)

我正在添加一种对我有用的手动方法。 步骤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仅显示第一行。 将变量更改为一行。像这样:

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

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

答案 1 :(得分:4)

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

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

答案 2 :(得分:2)

您可以将string.replace与正则表达式一起使用,如下所示以再次转义\ n字符:

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

答案 3 :(得分:2)

发现我的.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,
        }
    }
}

答案 4 :(得分:1)

您必须将env变量加载到gatsby中。最简单的方法是使用dotenv

设置:

yarn add -D dotenv # or npm install -D dotenv

然后在您的gatsby-config.js中:

require('dotenv').config();

module.exports = {
  plugins: [ ... ]
}

如果文件名不同于.env或将其存储在其他位置,则可以传递路径选项:

require('dotenv').config({
  path: 'path/to/env/file'
});

答案 5 :(得分:0)

放入一个pem文件,然后将其替换为您的.env文件

echo "export test_key=\"`sed -E 's/$/\\\n/g' ./gitbu.2018-03-23.private-key.pem`\"" >> .env

答案 6 :(得分:0)

对我有用的解决方案——以 base 64 编码私钥

步骤 1 - 将密钥转换为 Base 64

// Run this code in a JS file on your Dev Machine.
const privateKey= `-----BEGIN PRIVATE KEY-----\nMIIEvSomeMoreCharacterHererplw==\n-----END PRIVATE KEY-----\n`
const buff = Buffer.from(simpleTxt).toString('base64');
const base64data = buff2.toString('base64');
console.log(base64data);

注意:您不需要在项目中提交/包含上述代码。这只是为了生成key的base64字符串。

第 2 步 - 将控制台日志数据复制到 .env 文件

PRIVATE_KEY = 'akgjhakdgjhasgf'

第 3 步 - 在代码中使用密钥

const key = Buffer.from(process.env.PRIVATE_KEY , 'base64').toString('ascii');
// Use key anywhere in your code.