firebase / firebase/firebase-admin-node

Authentication error when using `database` with emulators

未关闭
#2,034 0 条评论 3 个 reaction 已指派 1 人 已被 @christhompsongoogle 认领 在 GitHub 查看
api: database
主要语言
TypeScript
星标
1.7k
派生
419
平均合并
3 天 10 小时
30 天内合并 PR
16

描述

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

贡献指南

打开贡献指南

评估

这个 Issue 还没有评估数据。

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。