【问题标题】:Fetch multiple users获取多个用户
【发布时间】:2020-02-26 11:36:38
【问题描述】:

我有一个连接到组的用户列表(uid)。在一个页面上,我想列出列表中用户的所有用户名和电子邮件。

为每个用户获取用户数据的推荐方法是什么?我只能在 admin sdk 中找到:admin.auth().getUser(uid)

  1. 有没有办法在一个请求中获取多个用户?前任 admin.auth().getUsers([uid1, uid2, uid3])?
  2. 有没有办法在客户端 sdk 中做到这一点?
  3. 如果 1. 不可能,达到极限不是很容易吗? https://firebase.google.com/docs/auth/limits#api_limits

【问题讨论】:

    标签: firebase firebase-authentication firebase-admin


    【解决方案1】:

    无法使用客户端 SDK 检索所有用户的列表,但您可以通过两种方式进行:

    使用 Firebase 实时数据库

    1. 您可以在数据库中添加用户名和电子邮件节点,例如 /users

      {
        "users": {
          "user1": {
            "username": "user1",
            "email": "user1@mail.com"
          },
          "user2": {
            "username": "user2",
            "email": "user2@mail.com"
          }
        }
      }
      
    2. 然后使用once('value')查询这个节点:

      const users = await firebase.database.ref('/userProfiles').once('value');
      console.log(users);
      

    使用可调用函数和 Firebase Admin SDK

    1. 创建一个HTTPS callable function,比如getAllUsers(),用于检索所有用户。 Firebase Admin SDK 可以使用list all users in batches of 1000

    2. 使用firebase deploy --only functions:getAllUsers部署函数。

    3. 然后从客户端调用函数:

      const getAllUsers = firebase.functions().httpsCallable('getAllUsers');
      const users = await getAllUsers();
      console.log(users);
      

    【讨论】:

    • 感谢您的回答 :) 在您的第一个建议中;您的意思是我必须将用户名+电子邮件从 firebase 用户 (firebase.google.com/docs/reference/js/firebase.User) 同步到数据库吗?这似乎有点尴尬? :)
    • 如果您决定采用第一种方法,那么是的,您必须同步用户名和电子邮件。您可以使用 Firebase 安全规则来确保它们同步;可以通过auth.token 对象访问身份验证数据。
    • 嗯好的,你的意思是我应该与安全规则同步?有一个用户创建触发器:firebase.google.com/docs/functions/… 但没有用户更新
    • 对不起,我的意思是每次在 auth 中创建/更新用户时,您仍然需要在数据库节点中手动创建/更新用户名和电子邮件。在您的安全规则中,您可以添加 .validate 规则以确保用户名和电子邮件值等于来自 auth 的用户名和电子邮件值。
    猜你喜欢
    • 2021-05-10
    • 2019-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多