【问题标题】:Firebaseapperror: failed to parse private key: error: invalid pem formatted messageFirebaseapperror:无法解析私钥:错误:无效的pem格式消息
【发布时间】:2022-01-13 18:23:42
【问题描述】:

当我将我的 nodejs 应用程序推送到 heroku 时,我收到了这个错误 firebaseapperror: failed to parse private key: error: invalid pem formatted message

我的环境变量都是这样设置的

# .env file
    
project_id=project_id
private_key='-----BEGIN PRIVATE KEY----- ... ------END PRIVATE KEY-----\n'
client_email=client_email

然后像这样访问它们:

export const sa = {
    privateKey: process.env.private_key,
    projectId: process.env.project_id,
    clientEmail: process.env.client_email
};

在我的本地一切正常,但在生产(heroku)上我得到了上面提到的错误。私钥是多行环境变量,无法解析。

请问,我该如何解决这个问题?

【问题讨论】:

    标签: node.js parsing environment-variables firebase-admin multiline


    【解决方案1】:

    修复

    我是通过在网上看到的一篇帖子解决这个问题的:How to Store a Long, Multi-line Private Key in an Environment Variable

    按照步骤操作,您也应该解决此问题。

    帖子的简要摘要如下:

    像这样将长的多行键存储为 json 字符串

    # .env file
    
    project_id=project_id
    private_key='{"privateKey": "-----BEGIN PRIVATE KEY----- ... ------END PRIVATE KEY-----\n"}'
    client_email=client_email
    

    然后解析它并像这样销毁密钥

    const { privateKey } = JSON.parse(process.env.private_key);
    
    export const sa = {
        privateKey,
        projectId: process.env.project_id,
        clientEmail: process.env.client_email
    };
    

    这可以在本地工作,但在生产中(heroku)你会得到一个解析错误,因为之前和之后的单引号问题的关键。因此,删除生产环境变量键前后的单引号。我还尝试过在本地没有单引号,并且它起作用了

    额外的好处

    此方法的额外好处

    由此,您甚至可以像这样将整个环境变量存储为一个对象

    # .env file
    
    sa='{"privateKey": "-----BEGIN PRIVATE KEY----- ... ------END PRIVATE KEY-----\n", "clientEmail": "client_email", "projectId": "project_id"}'
    

    然后像这样访问它

    export const sa = JSON.parse(process.env.sa);
    

    就是这样。

    提醒:记住我所说的单引号

    【讨论】:

      猜你喜欢
      • 2022-06-26
      • 1970-01-01
      • 2019-03-09
      • 2023-02-07
      • 1970-01-01
      • 2018-02-13
      • 1970-01-01
      • 2022-08-02
      • 1970-01-01
      相关资源
      最近更新 更多