I'm trying to create an Heroku node task that reads data from Firebase and console.log it.
My node script (located inside the /bin directory) is:
require('dotenv').config({ silent: true }); var firebase = require('firebase'); firebase.initializeApp({ serviceAccount: { projectId: process.env.fb_projectId, clientEmail: process.env.fb_clientEmail, privateKey: process.env.fb_privateKey }, databaseURL: process.env.fb_databaseURL }) console.log(process.env.fb_privateKey); firebase.database().ref('tasks').once('value', function(snapshot) { console.log(snapshot.val()); process.exit(); })
All env variables are correct, except fb_privateKey
, since it contains \n
characters.
Both my local .env
file and Heroku environment variables contains a key named fb_privateKey
and a value as a string with \n
characters - surrounded with "
.
fb_privateKey="-----BEGIN PRIVATE KEY-----\nMY-PRIVATE-KEY\n-----END PRIVATE KEY-----\n"
When I run the script locally, it logs me the private key with new lines + the tasks that were returned from Firebase. However, when I run it on Heroku, (heroku run myScript
) is logs me private key with \n
characters (as a single line) and fails to read the data from Firebase (probably due to a bad private key). Any ideas?
I had the same problem today. You need to sanitize the read private key by replacing \\n
characters with \n
.
admin.initializeApp({ credential: admin.credential.cert({ "projectId": process.env.FIREBASE_PROJECT_ID, "private_key": process.env.FIREBASE_PRIVATE_KEY.replace(/\\n/g, '\n'), "clientEmail": process.env.FIREBASE_CLIENT_EMAIL, }), databaseURL: process.env.FIREBASE_DATABASE_URL, });
I solved this by using the .replace(/\n/g, '\n') on the private key and also removing the quotes from the private key value on heroku config vars like it is bellow.
-----BEGIN PRIVATE KEY-----\nMY-PRIVATE-KEY\n-----END PRIVATE KEY-----\n
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With