webentwicklung-frage-antwort-db.com.de

Node.js -Firebase Service Account Private Key wird nicht analysiert

Ich verwende .env-Variablen in meiner app.js-Datei, um auf die Schlüssel zuzugreifen. Alles funktionierte gut, bis ich einen neuen Firebase Service Account Private Key heruntergeladen habe. Wenn ich den alten Wert durch den neuen Wert ersetzt habe, kann ich nicht mehr auf den Schlüssel zugreifen, da in terminal beim Ausführen von node app.js eine Fehlermeldung angezeigt wird:

/Users/Cpu/Desktop/...../node_modules/firebase-admin/lib/auth/credential.js:129 werfen Sie den neuen Fehler_1.FirebaseAppError aus (Fehler_1.AppErrorCodes.INVALID_CREDENTIAL, 'Fehler beim Analysieren des privaten Schlüssels:' + Fehler); ^

Fehler: Fehler beim Analysieren des privaten Schlüssels: Fehler: Ungültiges PEM-Format Botschaft. at FirebaseAppError.FirebaseError [als Konstruktor] (/Users/Cpu/Desktop/...../node_modules/firebase-admin/lib/utils/error.js:39:28) at FirebaseAppError.PrefixedFirebaseError [als Konstruktor] (/Users/Cpu/Desktop/...../node_modules/firebase-ad/lib/utils/error.js:85:28) at new FirebaseAppError (/Users/Cpu/Desktop/...../node_modules/firebase-admin/lib/utils/error.js:119:28) beim neuen Zertifikat (/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) bei Object.cert (/Users/Cpu/Desktop/.....) bei Objekt. (/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) bei FirebaseAppError.FirebaseError [als Konstruktor] npm ERR! Code ELIFECYCLE npm ERR! Errno 1

Alles, was ich tat, war c + p der neue Private Key und fügte ihn dann hinzu und speicherte die .env-Datei, die auf heroku verschoben wurde, und sie funktioniert nicht mehr. Ich habe sogar einen neuen Private Key heruntergeladen, aber das gleiche Problem tritt auf.

Die alten und neuen privaten Schlüssel

// old Private Key
-----BEGIN PRIVATE KEY-----\nbbbbbbbb\n-----END PRIVATE KEY-----\n

// new Private Key
-----BEGIN PRIVATE KEY-----\nzzzzzzzz\n-----END PRIVATE KEY-----\n

Die .env-Datei:

FIREBASE_PROJECT_ID=wwwwwwww
FIREBASE_CLIENT_EMAIL=xxxxxxxx
FIREBASE_DATABASE_URL=yyyyyyyy
FIREBASE_PRIVATE_KEY=-----BEGIN PRIVATE KEY-----\nzzzzzzzz\n-----END PRIVATE KEY-----\n

Die app.js-Datei:

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
});

Wie kann ich dieses Problem beheben?

10
Lance Samaria

Das Problem bestand darin, dass ich dotenv-Variablen in der .env-Datei verwendete, die FIREBASE_PRIVATE_KEY mit Zeichenzeichen versehen waren: \n in ihr.

Ich musste dieser Antwort folgen und .replace(/\\n/g, '\n') an das Ende anhängen, um sie zu analysieren:

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

So sieht der Code jetzt aus:

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
});
23
Lance Samaria

Sie müssen Ihren Schlüssel zu doppelten Qoutes hinzufügen, um die erweiterte Option für neue Zeilen gemäß dotenv-Dokumentation zuzulassen.

Sie können diese Option im Abschnitt Regeln in dotenv github überprüfen. 

https://github.com/motdotla/dotenv#rules

  FIREBASE_PROJECT_ID=wwwwwwww
  FIREBASE_CLIENT_EMAIL=xxxxxxxx
  FIREBASE_DATABASE_URL=yyyyyyyy
  FIREBASE_PRIVATE_KEY="-----BEGIN PRIVATE KEY-----\nzzzzzzzz\n-----END PRIVATE KEY-----\n"
0
Bryan Ramirez