当我将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)我得到了上面提到的错误。私钥是一个多行环境变量,无法解析。
拜托,我该怎么解决这个问题?
发布于 2021-12-08 20:10:37
The Fix
我是如何通过我在网上看到的一篇文章来修正这个问题的:如何在环境变量中存储长的多行私钥
按照这个步骤,您也应该修复这个步骤。
文章的简要摘要是:
将长的多行键存储为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
};
这将适用于本地,但是on production (heroku)您将得到一个解析错误,因为单引号在所讨论的密钥之前和之后都会出现。因此,在生产env变量中的键之前和之后删除单引号。我还尝试了没有,没有,单引号,在本地和,它的工作。
额外利益
使用此方法额外的好处
这样,您甚至可以将整个环境变量存储为一个对象,如下所示
# .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-11-20 12:21:23
或者,去掉围绕private_key
的单引号/双引号解决了我的情况。可以将prod env变量中的私钥设置为:
-----BEGIN PRIVATE KEY-----...-----END PRIVATE KEY-----
https://stackoverflow.com/questions/70281140
复制相似问题