Развертывание приложения Firebase с учетной записью службы в Heroku (переменные среды с dotenv)
У меня есть приложение node, которое использует учетную запись службы firebase. Я хотел бы развернуть приложение в Heroku, но я не хочу публиковать свои секретные ключи. Я развертываю непосредственно из публичного репозитория github, поэтому я не хочу включать файл учетной записи службы в развертывание.
Я могу взять файл учетной записи службы json, сделать каждое свойство переменной среды, добавить каждую из этих переменных в Heroku и развернуть. Все отлично работает (после авторизации нового домена Heroku на моем приложении firebase), но есть ли лучший способ сделать это? Это работает, но это было больно делать (копирование и вставка каждой переменной и ее перемещение). Я пропустил более простой способ сделать это?
Вот изменение, которое я делаю. Из этой строки, где он извлекает учетные данные из файла:
admin.initializeApp({
credential: admin.credential.cert('./path/firebase-service-account.json'),
databaseURL: "https://my-firebase-app.firebaseio.com"
});
К этому объекту, который приводит все те же вещи из переменных среды:
admin.initializeApp({
credential: admin.credential.cert({
"type": process.env.FIREBASE_TYPE,
"project_id": process.env.FIREBASE_PROJECT_ID,
"private_key_id": process.env.FIREBASE_PRIVATE_KEY_ID,
"private_key": process.env.FIREBASE_PRIVATE_KEY,
"client_email": process.env.FIREBASE_CLIENT_EMAIL,
"client_id": process.env.FIREBASE_CLIENT_ID,
"auth_uri": process.env.FIREBASE_AUTH_URI,
"token_uri": process.env.FIREBASE_TOKEN_URI,
"auth_provider_x509_cert_url": process.env.FIREBASE_AUTH_PROVIDER_X509_CERT_URL,
"client_x509_cert_url": process.env.FIREBASE_CLIENT_X509_CERT_URL
}),
databaseURL: "https://my-firebase-app.firebaseio.com"
});
Является ли это лучшей практикой для развертывания приложения Firebase с учетной записью службы в Heroku? Я использую модуль dotenv node, чтобы выполнить это.
Ответы
Ответ 1
Есть два обязательных поля для объекта опций cert: clientEmail
и privateKey
. Ваш пример можно обрезать до:
admin.initializeApp({
credential: admin.credential.cert({
"private_key": process.env.FIREBASE_PRIVATE_KEY,
"client_email": process.env.FIREBASE_CLIENT_EMAIL,
}),
databaseURL: "https://my-firebase-app.firebaseio.com"
});
В стороне, некоторые среды могут иметь проблемы с новыми строками в private_key
env var; Я нашел key.replace(/\\n/g, '\n')
как простое решение.