Node.js - Закрытый ключ учетной записи службы Firebase не будет проанализирован - PullRequest
0 голосов
/ 11 мая 2018

Я использую .env переменные в моем файле app.js для доступа к ключам. Все работало нормально, пока я не скачал новый Firebase Service Account Private Key. Когда я заменил старое значение новым, я больше не могу получить доступ к ключу, потому что в terminal, когда я запускаю node app.js, я получаю сообщение об ошибке:

/ Пользователи / Cpu / Desktop /...../ node_modules / firebase-админ / Библиотека / авториз / 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 / Процессор / Рабочий стол / .....) на объекте. (/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 [в качестве конструктора] нпм ERR! код ELIFECYCLE npm ERR! errno 1

Все, что я сделал, это с + 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
});

Как я могу исправить эту проблему?

Ответы [ 2 ]

0 голосов
/ 19 января 2019

Вы должны добавить свой ключ в двойные квоты, чтобы разрешить расширенную опцию новых строк в соответствии с документацией dotenv.

Вы можете проверить эту опцию в разделе Правила в dotenv github.

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 голосов
/ 16 мая 2018

Проблема заключалась в том, что я использовал dotenv переменные внутри .env файла, в котором 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
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...