Firebase管理员在连接到Auth Emulator时给出错误ECONNREFUSED



我正在尝试使用Firebase Admin SDK列出我的Firebase项目的所有用户
以下列出用户的功能在从云身份验证服务中列出时运行良好。

const admin = require('firebase-admin');
const serviceAccount = require('./certs/project-cert.json');
admin.initializeApp({
credential: admin.credential.cert(serviceAccount)
})
listAllUsers = (nextPageToken) => {
// List batch of users, 1000 at a time.
admin.auth().listUsers(1000, nextPageToken)
.then(function(listUsersResult) {
listUsersResult.users.forEach(function(userRecord) {
console.log(userRecord.toJSON());
});
if (listUsersResult.pageToken) {
// List next batch of users.
listAllUsers(listUsersResult.pageToken);
}
})
.catch(function(error) {
console.log('Error listing users:', error);
});
}

然后我将ENV变量设置为指向Emulator

export FIREBASE_AUTH_EMULATOR_HOST="localhost:9099"

并且运行相同的listAllUsers函数失败,并出现以下错误:

FirebaseAppError: Error while making request: connect ECONNREFUSED ::1:9099. Error code: ECONNREFUSED
at FirebaseAppError.FirebaseError [as constructor] (/Users/<me>/Work/pc/<project>/node_modules/firebase-admin/lib/utils/error.js:44:28)
at FirebaseAppError.PrefixedFirebaseError [as constructor] (/Users/<me>/Work/pc/<project>/node_modules/firebase-admin/lib/utils/error.js:90:28)
at new FirebaseAppError (/Users/<me>/Work/pc/<project>/node_modules/firebase-admin/lib/utils/error.js:125:28)
at /Users/<me>/Work/pc/<project>/node_modules/firebase-admin/lib/utils/api-request.js:211:19
at processTicksAndRejections (node:internal/process/task_queues:96:5) {
errorInfo: {
code: 'app/network-error',
message: 'Error while making request: connect ECONNREFUSED ::1:9099. Error code: ECONNREFUSED'
},
codePrefix: 'app'
}

我可以看到Emulator正在9099端口上运行,我可以从http://localhost:4000/auth访问它
iPhone模拟器本身可以很好地访问Auth emulator,但使用Admin SDK 会出现连接错误

我的env

macOS Monterey 12.3.1
"firebase-admin": "^10.2.0",
firebase-tools 10.9.2
node ver 17.6.0

firebase.json

...
"emulators": {
"auth": {
"port": 9099
},
...

将本地主机更改为127.0.0.1或类似版本(如果您使用docker等容器服务)

更改此项:

export FIREBASE_AUTH_EMULATOR_HOST="localhost:9099"

对此:

export FIREBASE_AUTH_EMULATOR_HOST="127.0.0.1:9099"

有时localhost和127.0.0.1的行为会有所不同,具体取决于您的平台

我在安装docker后发现了这一点,所有依赖localhost的东西都停止了的工作

我在运行Ionic/Cacitor应用程序时也遇到了这个问题,但只是在尝试从andriod和ios进行测试时。它是在网上工作的。我发现我需要将firebase.json设置为指向我电脑的IP地址192.168.68.22:

{
"firestore": {
"rules": "firestore.rules",
"indexes": "firestore.indexes.json"
},
"emulators": {
"auth": {
"host": "192.168.86.22",
"port": 9099
},
"firestore": {
"host": "192.168.86.22",
"port": 8080
},
"ui": {
"enabled": true
},
"singleProjectMode": true
}
}

然后,我确保在调用connectAuthEmulator()connectFirestoreEmulator():时使用这些值

import firebaseConfig from '../firebase.json';
const firestoreEmulatorHost = firebaseConfig.emulators.firestore.host
const firestoreEmulatorPort = firebaseConfig.emulators.firestore.port
const authEmulatorHost = firebaseConfig.emulators.auth.host
const authEmulatorPort = firebaseConfig.emulators.auth.port
export const firebaseApp: FirebaseApp = initializeApp({...})
const db = getFirestore()
connectAuthEmulator(auth, `http://${authEmulatorHost}:${authEmulatorPort}`, { disableWarnings: true })
connectFirestoreEmulator(db, firestoreEmulatorHost, firestoreEmulatorPort)

相关内容

最新更新