firebase / firebase/firebase-admin-node

Authentication error when using `database` with emulators

Offen
#2,034 0 Kommentare 3 Reaktionen 1 zugewiesene Person Beansprucht von @christhompsongoogle Auf GitHub ansehen
api: database
Vorherrschende Sprache
TypeScript
Sterne
1.7k
Forks
419
Ø Merge
3 T. 10 Std.
Gemergte PRs (30 T.)
16

Beschreibung

### Describe your environment

* Operating System version: Docker / Linux / Debian 16
* Firebase SDK version: `firebase-admin@11.4.1`
* 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:

```ts
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.

```ts
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))
```

Beitragsleitfaden

Beitragsleitfaden öffnen

Bewertung

Dieses Issue wurde noch nicht bewertet.

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.