我在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
不起作用,大概是因为它是多行。
有办法解决这个问题吗?
谢谢
答案 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 文件内容。以下方法对我有用。
答案 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 编码私钥
// 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字符串。
.env
文件PRIVATE_KEY = 'akgjhakdgjhasgf'
const key = Buffer.from(process.env.PRIVATE_KEY , 'base64').toString('ascii');
// Use key anywhere in your code.