Node.js -Firebase 服务帐户私钥不会解析 [英] Node.js -Firebase Service Account Private Key won't parse

查看:23
本文介绍了Node.js -Firebase 服务帐户私钥不会解析的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在 app.js 文件中使用 .env 变量来访问密钥.一切正常,直到我下载了一个新的 Firebase 服务帐户私钥.当我用新值替换旧值时,我无法再访问密钥,因为在 terminal 中,当我运行 node app.js 时,我不断收到错误消息:<块引用>

/Users/Cpu/Desktop/...../node_modules/firebase-admin/lib/auth/credential.js:129抛出新的 error_1.FirebaseAppError(error_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) at FirebaseAppError.FirebaseError [作为构造函数]npm 错误!代码 ELIFECYCLE npm ERR!错误1

我所做的只是 c+p 新的 Private Key 然后添加它并保存 .env 文件,推送到 heroku,它不再工作.我什至下载了一个新的Private Key,但出现了同样的问题.

新旧私钥

//旧私钥-----开始私钥-----
bbbbbbbb
-----结束私钥-----
//新的私钥-----开始私钥-----
zzzzzzzz
-----结束私钥-----

.env 文件:

FIREBASE_PROJECT_ID=wwwwwwwwFIREBASE_CLIENT_EMAIL=xxxxxxxxFIREBASE_DATABASE_URL=yyyyyyyyFIREBASE_PRIVATE_KEY=-----BEGIN PRIVATE KEY -----
zzzzzzzz
-----END PRIVATE KEY -----

app.js 文件:

const dotenv = require('dotenv');dotenv.load();var admin = require("firebase-admin");admin.initializeApp({凭据:admin.credential.cert({projectId: process.env.FIREBASE_PROJECT_ID,//这里没有错误clientEmail: process.env.FIREBASE_CLIENT_EMAIL,//这里没有错误privateKey: process.env.FIREBASE_PRIVATE_KEY//我在这里得到错误}),数据库网址:process.env.FIREBASE_DATABASE_URL});

我该如何解决这个问题?

解决方案

问题是因为我在 .env 文件中使用了 dotenv 变量 FIREBASE_PRIVATE_KEY 有转义字符: 在里面.

我必须按照 这个答案 并附加 .replace(/\n/g, ' ') 到它的末尾来解析它:

privateKey: process.env.FIREBASE_PRIVATE_KEY.replace(/\n/g, '
')

所以现在代码看起来像:

admin.initializeApp({凭据:admin.credential.cert({projectId: process.env.FIREBASE_PROJECT_ID,//这里没有错误clientEmail: process.env.FIREBASE_CLIENT_EMAIL,//这里没有错误privateKey: process.env.FIREBASE_PRIVATE_KEY.replace(/\n/g, '
')//现在可以了!!!}),数据库网址: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-----
bbbbbbbb
-----END PRIVATE KEY-----


// new Private Key
-----BEGIN PRIVATE KEY-----
zzzzzzzz
-----END PRIVATE KEY-----

The .env file:

FIREBASE_PROJECT_ID=wwwwwwww
FIREBASE_CLIENT_EMAIL=xxxxxxxx
FIREBASE_DATABASE_URL=yyyyyyyy
FIREBASE_PRIVATE_KEY=-----BEGIN PRIVATE KEY-----
zzzzzzzz
-----END PRIVATE KEY-----

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: inside of it.

I had to follow this answer and append .replace(/\n/g, ' ') to the end of it to parse it:

privateKey: process.env.FIREBASE_PRIVATE_KEY.replace(/\n/g, '
')

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, '
') // NOW THIS WORKS!!!
  }),
  databaseURL: process.env.FIREBASE_DATABASE_URL
});

这篇关于Node.js -Firebase 服务帐户私钥不会解析的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆