【问题标题】:How can I make Netlify parse a very long private key that I put in their environment variables?如何让 Netlify 解析我放入环境变量中的很长的私钥?
【发布时间】:2021-05-13 17:35:55
【问题描述】:

经过大量搜索互联网甚至 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 上运行它时遇到的相同错误。

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

【问题讨论】:

  • 目前,我的解决方法是从 env 变量中删除换行符,并在我的应用程序中创建一个函数,在从 Netlify 获取后将它们放回它们所属的位置。不应该这样做,但它现在可以工作。

标签: environment-variables netlify


【解决方案1】:

我刚刚解决了这个问题,并在this blogpost找到了答案:

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

看起来 netlify 为你转义了换行符......

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-15
    • 1970-01-01
    • 1970-01-01
    • 2012-08-30
    • 2023-03-31
    • 2020-02-24
    相关资源
    最近更新 更多