Firebaseapperror:无法解析私钥:错误:pem 格式的消息无效

问题描述 投票:0回答:5

当我将 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
5个回答
15
投票

修复

我是如何解决这个问题的,是通过我在网上看到的一篇文章:如何在环境变量中存储长的多行私钥

按照步骤操作,您也应该修复此问题。

帖子的简要摘要是这样的:

将长的多行密钥存储为 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);
就是这样。

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


1
投票
对我来说最一致的结果是将json转换为base64字符串,然后

JSON.parse(Buffer.from(process.env.CERT, 'base64').toString())


    


0
投票
或者,去掉

private_key

 周围的单/双引号解决了我的情况。您可以在产品环境变量中将私钥设置为:

-----BEGIN PRIVATE KEY-----...-----END PRIVATE KEY-----
    

0
投票
应该有 不是 .

不是这个

6","private_key":"-----BEGIN PRIVATE KEY-----\\nMIIEv
应该是这个

6","private_key":"-----BEGIN PRIVATE KEY-----\nMIIEv
会有很多
 在 RSA 密钥中,检查更多


0
投票
使用

"

 而不是 
'
 来存储私钥。

.env 文件

project_id=project_id private_key="-----BEGIN PRIVATE KEY----- ... ------END PRIVATE KEY-----\n" client_email=client_email
    
© www.soinside.com 2019 - 2024. All rights reserved.