Node.js -Firebase Service Account Private Key won't parse
The problem was since I used dotenv
variables inside the .env
file the FIREBASE_PRIVATE_KEY
had escaping characters: \n
inside of it.
I had to follow this answer and append .replace(/\\n/g, '\n')
to the end of it to parse it:
privateKey: process.env.FIREBASE_PRIVATE_KEY.replace(/\\n/g, '\n')
So now the code looks like:
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});
You must add your key into double qoutes to allow expanded new lines option according with dotenv
documentation.
You can check that option at Rules section in 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"
I believe cert function is wating JSON objecttry converting the key into JSON and i think it will work
credential: admin.credential.cert(JSON.parse(serviceAccountKey))
this worked for me !