首页 > 解决方案 > 如何让 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 上运行它时遇到的相同错误。

真的希望有人知道我可以做些什么来解决这个问题。

标签: environment-variablesnetlify

解决方案


我只需要解决这个问题并在这篇博文中找到答案:

credentials: {
  client_email: process.env.GCP_CLIENT_EMAIL,
  private_key: process.env.GCP_PRIVATE_KEY.split("\\n").join("\n")
}

看起来 netlify 为你逃脱了换行符......


推荐阅读