You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Firebase Authentication中listUsers is not a function错误求助

问题根源

listUsers 是Firebase Admin SDK的服务器端专属方法,你在前端用的是Firebase客户端Web SDK的AuthImpl实例——这个客户端实例根本没有listUsers方法。Firebase这么设计是出于安全考虑,不允许前端直接获取全量用户列表。

解决办法

必须通过服务器端或云函数用Admin SDK查询用户列表,再让前端调用接口拿数据,下面是两种实用方案:

方案1:自建后端服务用Admin SDK

  1. 后端项目里安装Admin SDK:
npm install firebase-admin
  1. 用服务账号密钥初始化Admin SDK:
const admin = require('firebase-admin');
const serviceAccount = require('./你的服务账号密钥路径.json');

admin.initializeApp({
  credential: admin.credential.cert(serviceAccount)
});
  1. 写个接口提供用户列表:
// 以Express为例
app.get('/api/get-users', async (req, res) => {
  try {
    const userList = await admin.auth().listUsers(1000);
    res.send(userList.users);
  } catch (err) {
    res.status(500).send({ error: err.message });
  }
});
  1. 前端改调用逻辑,请求这个后端接口:
const listAllUsers = async () => {
  try {
    const res = await fetch('/api/get-users');
    const users = await res.json();
    users.forEach(user => console.log('user', user));
  } catch (err) {
    console.log('拉取用户列表失败:', err);
  }
};

方案2:用Firebase云函数做可调用接口

  1. 初始化云函数:
firebase init functions
  1. 在functions/index.js里写云函数:
const functions = require("firebase-functions");
const admin = require("firebase-admin");
admin.initializeApp();

exports.getUsersList = functions.https.onCall(async (data, context) => {
  // 加个权限校验,只让管理员调用
  if (!context.auth || !context.auth.token.admin) {
    throw new functions.https.HttpsError('permission-denied', '只有管理员能访问');
  }
  
  try {
    const userList = await admin.auth().listUsers(1000);
    return userList.users;
  } catch (err) {
    throw new functions.https.HttpsError('internal', err.message);
  }
});
  1. 部署云函数:
firebase deploy --only functions
  1. 前端调用这个云函数:
// 先引入云函数模块
import { getFunctions, httpsCallable } from "firebase/functions";

const listAllUsers = async () => {
  const functions = getFunctions();
  const getUsers = httpsCallable(functions, 'getUsersList');
  try {
    const result = await getUsers();
    result.data.forEach(user => console.log('user', user));
  } catch (err) {
    console.log('拉取用户列表失败:', err);
  }
};
重要提醒

不管用哪种方案,一定要加权限校验,不能随便让任何人都能拿到用户列表;另外服务账号密钥绝对不能暴露在前端代码里,要放在后端安全存储。

内容的提问来源于stack exchange,提问作者Xin Chen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 03:10:31