Skip to content

Authentication error when using database with emulators #2034

Open
@ph-fritsche

Description

@ph-fritsche

Describe your environment

  • Operating System version: Docker / Linux / Debian 16
  • Firebase SDK version: [email protected]
  • Firebase Product: database
  • Node.js version: 16.17
  • NPM version: 8.15

Describe the problem

Using the database per firebase-admin with emulators throws an error.

Steps to reproduce:

import admin from 'firebase-admin'

process.env.GCLOUD_PROJECT = 'demo'
process.env.FIREBASE_AUTH_EMULATOR_HOST = 'localhost:9099'

const demoApp = admin.initializeApp({
    databaseURL: 'http://localhost:9000/?ns=demo-default-rtdb',
})

// This uses the emulator and works.
await demoApp.auth().listUsers()
    .then(l => console.log(l))

// This fails with FirebaseAppError.
// code: app/invalid-credential
// Credential implementation provided to initializeApp() via the "credential" property failed to fetch a valid Google OAuth2 access token with the following error: "Error fetching access token: Error while making request: getaddrinfo ENOTFOUND metadata.google.internal. Error code: ENOTFOUND"
// in firebase-admin/lib/app/firebase-app.js:85:19
await demoApp.database().getRules()
    .then(r => console.log(r))

Working alternative:

Just supplying a stub for the Credential interface works, as the token is never verified.
I think this should be added to the docs at https://firebase.google.com/docs/emulator-suite/connect_rtdb#admin_sdks and https://firebase.google.com/docs/database/admin/start.

import admin from 'firebase-admin'

process.env.GCLOUD_PROJECT = 'demo'
process.env.FIREBASE_AUTH_EMULATOR_HOST = 'localhost:9099'

const demoApp = admin.initializeApp({
    credential: {
        getAccessToken: () => Promise.resolve({access_token: 'foo', expires_in: 3600}),
    },
    databaseURL: 'http://localhost:9000/?ns=demo-default-rtdb',
})

await demoApp.auth().listUsers()
    .then(l => console.log(l))

await demoApp.database().getRules()
    .then(r => console.log(r))

Metadata

Metadata

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions