Firebase secrets not defined in process.env

Viewed 311

I'm writing a Firebase function with Cloud Storage trigger. Like this

const functions = require('firebase-functions')
const doSomethingWithSecrets = require('./doSomethingWithSecrets')

const doSomethingWhenUploaded = functions.runWith({
  secrets: ["MY_SECRET_1", "MY_SECRET_2", "MY_SECRET_3"]
}).storage.object().onFinalize(o => {
  functions.logger.debug([
    process.env.MY_SECRET_1  // undefined
    process.env.MY_SECRET_2  // undefined
    process.env.MY_SECRET_3  // undefined
  ])

  doSomethingWithSecrets(process.env.MY_SECRET_1, process.env.MY_SECRET_2, process.env.MY_SECRET_3)
  // Error: Invalid secret.
})

All three of them returns undefined. I've made sure that they're properly set. They show up both when using firebase functions:secret:accesss MY_SECRET_1 and in Google Cloud Console.

What's wrong?

Additional info

I previously used it with only one secret and it worked. I don't know what happened, I'm using nvm and lost track of which Node version I used when it worked, so it may be a clue.

process.env returns all the env like normal and none of my secrets shows up.

2 Answers

I encountered the exact same issue. After much suffering I finally got it to work. When you start using secrets in your functions, you need to redeploy all functions and NOT just the individual function.

e.g

firebase deploy --only functions:myFunc

results in my secret values coming through as 'undefined' when accessed from my function using runWith(), however after doing a full functions deploy

firebase deploy --only functions

everything worked.

Related