【问题标题】:How do you list all users in firebase firestore function您如何在 firebase firestore 功能中列出所有用户
【发布时间】:2018-09-17 16:59:49
【问题描述】:

我一直在学习 firebase firestore 功能,我想列出所有用户,然后将一个值与他们存储的值进行比较。例如,如果有 20 个用户,我想查看所有名为“mike”的用户,如何获取用户数组以便比较它们,以便找到所有名为“mike”的用户?

我在跑步:

"firebase-admin": "^5.11.0",
"firebase-functions": "^1.0.0"

我看到了 firebase admin 的这个 sn-p 代码,但我不认为它可以工作,因为它没有被标记为 firestore 函数,但如果我返回“admin.auth().listUsers ...”,如果它可以工作的话。我会得到一个用户数组列表吗?

    function 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("user", userRecord.toJSON());
      });
      if (listUsersResult.pageToken) {
        // List next batch of users.
        listAllUsers(listUsersResult.pageToken)
      }
    })
    .catch(function(error) {
      console.log("Error listing users:", error);
    });
}

【问题讨论】:

  • 您展示的代码(来自this documentation section 感兴趣的人)准确地展示了如何从 Firebase 身份验证中获取一组用户。然而,它与 Cloud Firestore 无关,也与 Cloud Functions for Firebase 无关。如果您想获取用户列表,我建议您首先尝试在本地 Node.js 脚本中运行此代码,然后从那里开始工作。
  • @FrankvanPuffelen 但是我如何让它连接到云中的功能
  • 我强烈建议一步一步来。首先让它在本地 Node.js 系统上运行。完成该工作并准备好将其移至 Cloud Functions 以便您可以从应用程序中调用它后,请在此处查看:firebase.google.com/docs/functions/callable

标签: javascript function firebase google-cloud-firestore google-cloud-functions


【解决方案1】:

也许您应该使用函数getUserByDisplayName() 进行搜索。 您可以在此 Firebase 指南中看到它:https://firebase.google.com/docs/auth/admin/manage-users#list_all_users。但正如 Frank 所说,这与 firebase-functions. 无关,它是 Firebase Auth 的一部分。

希望这会有所帮助!

【讨论】:

  • 那是 sdk 而不是 api
【解决方案2】:

这就是我的做法:

const functions = require('firebase-functions');
const admin = require('firebase-admin')

admin.initializeApp()

const express = require('express')
const app = express()

app.get('/users', async (req, res) => {
    try {
        const listUsers = await admin.auth().listUsers()

        return res.status(200).send({ listUsers })
    } catch (err) {
        return handleError(res, err)
    }
})

exports.api = functions.https.onRequest(app)

这显示了一个用户列表,但仍需要一些工作以使其更好

更新

    exports.getAllUsers = async (req, res) => {
    var allUsers = [];
    return admin.auth().listUsers()
        .then(function (listUsersResult) {
            listUsersResult.users.forEach(function (userRecord) {
                // For each user
                var userData = userRecord.toJSON();
                allUsers.push(userData);
            });
            res.status(200).send(JSON.stringify(allUsers));
        })
        .catch(function (error) {
            console.log("Error listing users:", error);
            res.status(500).send(error);
        });
}

【讨论】:

  • 为什么不使用 res.json(data)
  • @SuperUberDuper 实际上我将代码更改为:exports.getAllUsers = async (req, res) => { var allUsers = []; return admin.auth().listUsers() .then(function (listUsersResult) { listUsersResult.users.forEach(function (userRecord) { // 对于每个用户 var userData = userRecord.toJSON(); allUsers.push(userData); }); res.status(200).send(JSON.stringify(allUsers)); }) }
  • 它只返回前 1000 个用户
猜你喜欢
  • 2018-08-28
  • 2021-08-26
  • 2020-06-27
  • 1970-01-01
  • 2019-12-09
  • 2018-05-09
  • 2023-03-26
  • 2017-04-22
相关资源
最近更新 更多