Chadd
Chadd

Reputation: 636

Using the local emulator - Firebase Serve - Error: Certificate object must be an object

Goal

Use the firebase emulator and deploy firebase cloud functions locally for test and debug.

Issue

When firebase serve is run, it fails with - Error: Certificate object must be an object.

What's been tried

Following Google's documentation here, the instructions include these steps:

To set up admin credentials for emulated functions (other than Cloud Firestore and Realtime Database):

  1. Open the Service Accounts pane of the Google Cloud Console.

  2. Make sure that App Engine default service account is selected, and use the options menu at right to select Create key.

  3. When prompted, select JSON for the key type, and click Create. Set your Google default credentials to point to the downloaded key:

    $ export GOOGLE_APPLICATION_CREDENTIALS="path/to/key.json"

    $ firebase functions:shell

    OR

    $ firebase serve --only functions

Completing these instructions and running firebase serve... fails. Here are the logs:

Silver-Sliver:functions dchaddportwine$ firebase serve --only functions

=== Serving from '/Users/dchaddportwine/Sites/people-is-cloud-functions/functions'...

i  functions: Preparing to emulate functions.
Warning: You're using Node.js v8.11.1 but Google Cloud Functions only supports v6.11.5.
⚠  functions: Failed to load functions source code. Ensure that you have the latest SDK by running npm i --save firebase-functions inside the functions directory.
⚠  functions: Error from emulator. Error occurred while parsing your function triggers.

Error: Certificate object must be an object.
    at FirebaseAppError.FirebaseError [as constructor] (/Users/dchaddportwine/Sites/people-is-cloud-functions/functions/node_modules/firebase-admin/lib/utils/error.js:39:28)
    at FirebaseAppError.PrefixedFirebaseError [as constructor] (/Users/dchaddportwine/Sites/people-is-cloud-functions/functions/node_modules/firebase-admin/lib/utils/error.js:85:28)
    at new FirebaseAppError (/Users/dchaddportwine/Sites/people-is-cloud-functions/functions/node_modules/firebase-admin/lib/utils/error.js:119:28)
    at new Certificate (/Users/dchaddportwine/Sites/people-is-cloud-functions/functions/node_modules/firebase-admin/lib/auth/credential.js:106:19)
    at new CertCredential (/Users/dchaddportwine/Sites/people-is-cloud-functions/functions/node_modules/firebase-admin/lib/auth/credential.js:189:64)
    at Object.cert (/Users/dchaddportwine/Sites/people-is-cloud-functions/functions/node_modules/firebase-admin/lib/firebase-namespace.js:220:58)
    at Object.<anonymous> (/Users/dchaddportwine/Sites/people-is-cloud-functions/functions/index.js:21:32)
    at Module._compile (module.js:652:30)
    at Object.Module._extensions..js (module.js:663:10)
    at Module.load (module.js:565:32)

Question

How do I fix these two errors?

  1. I have firebase-functions installed, and have tried npm i --save firebase-functions

    ⚠ functions: Failed to load functions source code. Ensure that you have the latest SDK by running npm i --save firebase-functions inside the functions directory.

  2. Thinking this has to do with GOOGLE_APPLICATION_CREDENTIALS, but I'm not sure how to verify or check what's happening here.

    ⚠ functions: Error from emulator. Error occurred while parsing your function triggers.

Error: Certificate object must be an object.

UPDATE

Further along in the documentation, it reads:

If you're using custom functions configuration variables, run the following command in the functions directory of your project before running firebase serve.

firebase functions:config:get > .runtimeconfig.json

After running this command, I no longer get the certificate error. Woot! However, I am getting new failures and not many hints from the logs.

=== Serving from '/Users/dchaddportwine/Sites/people-is-cloud-functions/functions'...

i  functions: Preparing to emulate functions.
i  hosting[development-is]: Serving hosting files from: ./
✔  hosting[development-is]: Local server: http://localhost:5000
Warning: You're using Node.js v8.11.1 but Google Cloud Functions only supports v6.11.5.
⚠  functions: Failed to emulate app
⚠  functions: Failed to emulate helloSlack
⚠  functions: Failed to emulate helloIssy
⚠  functions: Failed to emulate interactiveIssy
i  functions: No HTTPS functions found. Use firebase functions:shell if you would like to emulate other types of functions.

Code

Here is the firebase cloud functions for helloSlack

exports.helloSlack = functions.https.onRequest((req, res) => {
  if (req) {
    res.status(200).send(req.body);
  } else {
    console.log("req Error...");
    throw res.status(500);
  }
});

Upvotes: 0

Views: 1475

Answers (1)

Chadd
Chadd

Reputation: 636

Answer

Further along in the documentation, it reads:

If you're using custom functions configuration variables, run the following command in the functions directory of your project before running firebase serve.

firebase functions:config:get > .runtimeconfig.json

This project is using custom functions configuration variables. So, after running the config command, I no longer get the certificate error. Woot!

Upvotes: 1

Related Questions