Search code examples
javascriptnode.jsfirebasefirebase-admin

firebase-tools getaddrinfo ENOTFOUND metadata.google.internal


I'm getting this error in my terminal:

@firebase/database: FIREBASE WARNING: {"code":"app/invalid- 
credential","message":"Credential implementation provided to . 
initializeApp() via the \"credential\" property failed to fetch a valid 
Google OAuth2 access token with the following error: \"Failed to parse 
access token response: Error: Error while making request: getaddrinfo 
ENOTFOUND metadata.google.internal metadata.google.internal:80. Error 
code: ENOTFOUND\"."}`

when using firebase-tools. This is the simple node script I'm trying to run.

const admin = require("firebase-admin");

const firebase = admin.initializeApp({
  apiKey: "MY_API_KEY",
  authDomain: "APP_ID.firebaseapp.com",
  databaseURL: `https://DATABASE_URL.firebaseio.com`,
  projectId: "APP_ID"
});

const snap = firebase
  .database()
  .ref("REF")
  .child("ID")
  .once("value");
console.log(snap);

Firebase tools version: 5.0.1

I've tried uninstalling and reinstalling, logging in and out of firebase-tools with firebase login / firebase-logout


Solution

  • the configuration has the wrong structure and lacks fields ...

    admin.initializeApp({
        databaseURL: 'https://<DATABASE_NAME>.firebaseio.com',
        credential: admin.credential.cert({
            projectId: '<PROJECT_ID>',
            clientEmail: 'foo@<PROJECT_ID>.iam.gserviceaccount.com',
            privateKey: '-----BEGIN PRIVATE KEY-----\n<KEY>\n-----END PRIVATE KEY-----\n'
        })
    });
    

    you cannot just use the "web" configuration to access the Firebase Admin SDK.

    because if this would be possible, the private key would be exposed to the public.

    see the documentation.