#node.js #parsing #environment-variables #firebase-admin #multiline
#node.js #синтаксический анализ #переменные среды #firebase-администратор #многострочный
Вопрос:
Я получил эту ошибку firebaseapperror: failed to parse private key: error: invalid pem formatted message
, когда я отправил свое приложение nodejs в heroku.
Все мои переменные среды были установлены следующим образом
# .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) Я получил ошибку, упомянутую выше. Закрытый ключ является многострочной переменной среды, и его невозможно проанализировать.
Пожалуйста, как мне это исправить?
Ответ №1:
Исправление
Я исправил это с помощью сообщения, которое я видел в Интернете: как сохранить длинный многострочный закрытый ключ в переменной среды
Следуйте инструкциям, и вы также должны это исправить.
Краткое изложение сообщения таково:
Сохраните длинный многострочный ключ в виде строки 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
};
Это будет работать на локальном, но на производстве (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);
Вот и все.
Напоминание: помните, что я сказал об одинарных кавычках!
Комментарии:
1. Также ознакомьтесь с тем, как сохранить длинный многострочный закрытый ключ в переменной среды