environment-variables - 如何让 Netlify 解析我放入环境变量中的很长的私钥?
问题描述
经过大量搜索互联网甚至SO后,我找不到这个问题的答案,甚至找不到任何解决类似问题的人。我有一个谷歌开发者私钥(一个很长的包含换行符的私钥),我收到一条错误消息,显示来自试图解析私钥的文件的“TypeError:无法读取 null 的属性 '2'”。我认为问题在于私钥看起来像一个 SSH 密钥,它有 1732 个字符和多个换行符。当用换行符求值时,它形成一个多行块,BEGIN
然后是 26 行,每行 64 个字符(最后一个除外)和END
行。
REACT_APP_GOOGLE_PRIVATE_KEY="-----BEGIN PRIVATE KEY-----\nMIIEvQIB ... c4L+SIi89q1aDDD/o=\n-----END PRIVATE KEY-----\n"
而且无论我如何尝试使该关键工作,我总是会遇到该错误。
我获取此密钥的代码:
// google-config.js
module.exports = {
devCreds: {
type: process.env.REACT_APP_GOOGLE_TYPE,
project_id: process.env.REACT_APP_GOOGLE_PROJECT_ID,
private_key_id: process.env.REACT_APP_GOOGLE_PRIVATE_KEY_ID,
private_key: process.env.REACT_APP_GOOGLE_PRIVATE_KEY,
client_email: process.env.REACT_APP_GOOGLE_CLIENT_EMAIL,
client_id: process.env.REACT_APP_GOOGLE_CLIENT_ID,
auth_uri: process.env.REACT_APP_GOOGLE_AUTH_URI,
token_uri: process.env.REACT_APP_GOOGLE_TOKEN_URI,
auth_provider_x509_cert_url:
process.env.REACT_APP_GOOGLE_AUTH_PROVIDER_X509_CERT_URL,
client_x509_cert_url: process.env.REACT_APP_GOOGLE_CLIENT_X509_CERT_URL,
},
};
以及使用密钥的代码...
const { devCreds } = require('./google-config');
export async function addRow(data) {
const doc = new GoogleSpreadsheet(formDataDestinationSheet);
return doc.useServiceAccountAuth(devCreds, error => {
doc.addRow(1, data, error => {
if (error) console.log(error);
});
if (error) console.log(error);
});
}
为了确保我得到了私钥,当应用程序开始看到它是我期望的那样时,我将它注销。这可能不聪明,但当你感到沮丧时,你会尝试任何事情。很明显,我很快就会得到一把新钥匙。
所以这就是我尝试过的......整个事情......双引号,单引号,反引号,根本没有引号。\
我还尝试在上述每个场景中转义,例如\\n
在每个换行符处。在某处我读到有人成功地用下划线替换了换行符(但他们正在处理一个实际的 ssh 密钥,所以...¯\_(ツ)_/¯...)我显然开始掌握吸管在这里。
在上述大多数情况下,这在我的盒子上运行得很好。它在我的盒子上不起作用的方式是使用反引号和转义换行符。反引号方法给了我在 Netlify 上运行它时遇到的相同错误。
真的希望有人知道我可以做些什么来解决这个问题。
解决方案
我只需要解决这个问题并在这篇博文中找到答案:
credentials: {
client_email: process.env.GCP_CLIENT_EMAIL,
private_key: process.env.GCP_PRIVATE_KEY.split("\\n").join("\n")
}
看起来 netlify 为你逃脱了换行符......
推荐阅读
- google-app-engine - 如何使 HTTP 调用到达 App Engine 负载平衡器后面的所有实例?
- mysql - 从 Yii2 模型重新创建数据库表
- javascript - 将文本框输入传递到另一个页面时出现问题 - 特别是 javascript 和 html 中的名字和姓氏
- python - 尝试构建逻辑模型时出现类型错误
- perforce - Perforce,我如何确定上次同步的更改列表
- angular - Angular 4 渲染子选择器将列对齐中断到我的表中
- python - 在 Matplotlib 中使用 LineCollection 时是否可以设置透明度?
- ruby-on-rails - 欢迎使用 Nginx 页面显示而不是实际网页
- regex - HTML5 模式 - 10 个字符 - 至少一个字母
- mongodb - 如何在 mongodb 聚合中获取嵌套数组的总和?