Node.js-Firebase服务帐户私钥将无法解析 [英] Node.js -Firebase Service Account Private Key won't parse
问题描述
我在我的app.js文件中使用.env
变量来访问密钥.一切正常,直到我下载了新的Firebase Service Account Private Key
.当我用新值替换旧值时,我无法再访问键,因为在terminal
中,当我运行node app.js
时,我不断收到错误消息:
/Users/Cpu/Desktop/...../node_modules/firebase-admin/lib/auth/credential.js:129 引发新的错误_1.FirebaseAppError(错误_1.AppErrorCodes.INVALID_CREDENTIAL, '无法解析私钥:'+错误); ^
错误:无法解析私钥:错误:无效的PEM格式 信息. 在FirebaseAppError.FirebaseError [作为构造函数](/Users/Cpu/Desktop/...../node_modules/firebase-admin/lib/utils/error.js:39:28) 在FirebaseAppError.PrefixedFirebaseError [作为构造函数](/Users/Cpu/Desktop/...../node_modules/firebase-admin/lib/utils/error.js:85:28) 在新的FirebaseAppError(/Users/Cpu/Desktop/...../node_modules/firebase-admin/lib/utils/error.js:119:28) 在新证书上(/Users/Cpu/Desktop/...../node_modules/firebase-admin/lib/auth/credential.js:129:19) 在新的CertCredential(/Users/Cpu/Desktop/...../node_modules/firebase-admin/lib/auth/credential.js:192:64) 在Object.cert(/Users/Cpu/Desktop/.....) 在对象. (/Users/Cpu/Desktop/...../app.js:14:32) 在Module._compile(module.js:571:32) 在Object.Module._extensions..js(module.js:580:10) 在Module.load(module.js:488:32)在FirebaseAppError.FirebaseError [作为构造函数] npm ERR!代码ELIFECYCLE npm ERR! errno 1
我所做的就是c + p新的Private Key
,然后将其添加并保存.env
文件,将其推送到heroku,它不再起作用.我什至下载了一个新的Private Key
,但还是发生了同样的问题.
新旧私钥
// old Private Key
-----BEGIN PRIVATE KEY-----\nbbbbbbbb\n-----END PRIVATE KEY-----\n
// new Private Key
-----BEGIN PRIVATE KEY-----\nzzzzzzzz\n-----END PRIVATE KEY-----\n
.env文件:
FIREBASE_PROJECT_ID=wwwwwwww
FIREBASE_CLIENT_EMAIL=xxxxxxxx
FIREBASE_DATABASE_URL=yyyyyyyy
FIREBASE_PRIVATE_KEY=-----BEGIN PRIVATE KEY-----\nzzzzzzzz\n-----END PRIVATE KEY-----\n
app.js文件:
const dotenv = require('dotenv');
dotenv.load();
var admin = require("firebase-admin");
admin.initializeApp({
credential: admin.credential.cert({
projectId: process.env.FIREBASE_PROJECT_ID, // I get no error here
clientEmail: process.env.FIREBASE_CLIENT_EMAIL, // I get no error here
privateKey: process.env.FIREBASE_PRIVATE_KEY // I get error HERE
}),
databaseURL: process.env.FIREBASE_DATABASE_URL
});
如何解决此问题?
问题是因为我在.env
文件中使用了dotenv
变量,而FIREBASE_PRIVATE_KEY
在其中包含了转义字符:\n
. >
我必须遵循此答案,并在其末尾附加.replace(/\\n/g, '\n')
来进行解析:
privateKey: process.env.FIREBASE_PRIVATE_KEY.replace(/\\n/g, '\n')
所以现在代码如下:
admin.initializeApp({
credential: admin.credential.cert({
projectId: process.env.FIREBASE_PROJECT_ID, // I get no error here
clientEmail: process.env.FIREBASE_CLIENT_EMAIL, // I get no error here
privateKey: process.env.FIREBASE_PRIVATE_KEY.replace(/\\n/g, '\n') // NOW THIS WORKS!!!
}),
databaseURL: process.env.FIREBASE_DATABASE_URL
});
I use .env
variables in my app.js file to access the keys. Everything was working fine until I downloaded a new Firebase Service Account Private Key
. When I replaced the old value with the new value I can no longer access the key because in terminal
when I run node app.js
I keep getting an error message:
/Users/Cpu/Desktop/...../node_modules/firebase-admin/lib/auth/credential.js:129 throw new error_1.FirebaseAppError(error_1.AppErrorCodes.INVALID_CREDENTIAL, 'Failed to parse private key: ' + error); ^
Error: Failed to parse private key: Error: Invalid PEM formatted message. at FirebaseAppError.FirebaseError [as constructor] (/Users/Cpu/Desktop/...../node_modules/firebase-admin/lib/utils/error.js:39:28) at FirebaseAppError.PrefixedFirebaseError [as constructor] (/Users/Cpu/Desktop/...../node_modules/firebase-admin/lib/utils/error.js:85:28) at new FirebaseAppError (/Users/Cpu/Desktop/...../node_modules/firebase-admin/lib/utils/error.js:119:28) at new Certificate (/Users/Cpu/Desktop/...../node_modules/firebase-admin/lib/auth/credential.js:129:19) at new CertCredential (/Users/Cpu/Desktop/...../node_modules/firebase-admin/lib/auth/credential.js:192:64) at Object.cert (/Users/Cpu/Desktop/.....) at Object. (/Users/Cpu/Desktop/...../app.js:14:32) at Module._compile (module.js:571:32) at Object.Module._extensions..js (module.js:580:10) at Module.load (module.js:488:32) at FirebaseAppError.FirebaseError [as constructor] npm ERR! code ELIFECYCLE npm ERR! errno 1
All I did was c+p the new Private Key
and then added it and saved the .env
file, pushed to heroku, and it's no longer working. I even downloaded a new Private Key
but the same problem occurs.
The old and new Private Keys
// old Private Key
-----BEGIN PRIVATE KEY-----\nbbbbbbbb\n-----END PRIVATE KEY-----\n
// new Private Key
-----BEGIN PRIVATE KEY-----\nzzzzzzzz\n-----END PRIVATE KEY-----\n
The .env file:
FIREBASE_PROJECT_ID=wwwwwwww
FIREBASE_CLIENT_EMAIL=xxxxxxxx
FIREBASE_DATABASE_URL=yyyyyyyy
FIREBASE_PRIVATE_KEY=-----BEGIN PRIVATE KEY-----\nzzzzzzzz\n-----END PRIVATE KEY-----\n
The app.js file:
const dotenv = require('dotenv');
dotenv.load();
var admin = require("firebase-admin");
admin.initializeApp({
credential: admin.credential.cert({
projectId: process.env.FIREBASE_PROJECT_ID, // I get no error here
clientEmail: process.env.FIREBASE_CLIENT_EMAIL, // I get no error here
privateKey: process.env.FIREBASE_PRIVATE_KEY // I get error HERE
}),
databaseURL: process.env.FIREBASE_DATABASE_URL
});
How can I fix this issue?
The problem was since I used dotenv
variables inside the .env
file the FIREBASE_PRIVATE_KEY
had escaping characters: \n
inside of it.
I had to follow this answer and append .replace(/\\n/g, '\n')
to the end of it to parse it:
privateKey: process.env.FIREBASE_PRIVATE_KEY.replace(/\\n/g, '\n')
So now the code looks like:
admin.initializeApp({
credential: admin.credential.cert({
projectId: process.env.FIREBASE_PROJECT_ID, // I get no error here
clientEmail: process.env.FIREBASE_CLIENT_EMAIL, // I get no error here
privateKey: process.env.FIREBASE_PRIVATE_KEY.replace(/\\n/g, '\n') // NOW THIS WORKS!!!
}),
databaseURL: process.env.FIREBASE_DATABASE_URL
});
这篇关于Node.js-Firebase服务帐户私钥将无法解析的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!