Firebase云功能Admin SDK - 列出用户 - 分页问题

Posted

技术标签:

【中文标题】Firebase云功能Admin SDK - 列出用户 - 分页问题【英文标题】:Firebase cloud function Admin SDK - listing user - problem with pagination 【发布时间】:2022-01-23 13:59:58 【问题描述】:

我已经实现了一个 HTTP 可调用函数来获取所有用户。正如您在我的代码中看到的,问题在于requestedPageToken(来自客户端调用)与listUsersResult.pageToken(从listusers 函数返回)相同。我的客户端应用程序一遍又一遍地使用相同的令牌调用此函数,但它只获取用户的第一页,因为listUsersResult 返回相同的令牌而不是下一页令牌。这是我的 TypeScript 代码:

export const listAllUsers = functions.https.onCall((data, context) => 
    try 
      if (data !== null) 
        const requestedPageToken = data.text;
        console.log("PageToken is: " + data);
        return admin.auth().listUsers(50, requestedPageToken)
            .then((listUsersResult) => 
              console.log("New PageToken is: " + listUsersResult.pageToken);
              return listUsersResult;
            ).catch((reason) => 
              return Promise.reject(
                  new Error(reason));
            );
       else 
        return admin.auth().listUsers(50);
      
     catch (error) 
      console.error("Error: " + error);
      return Promise.reject(error);
    
);

我找不到问题出在哪里。为什么我没有获得下 50 个用户的令牌?

【问题讨论】:

您的日志信息打印正确吗? 是的,这是这两条日志消息的日志输出:PageToken is: 2Sq0O25MHMgXdcQMz5M0...,这是另一条New PageToken is: 2Sq0O25MHMgXdcQMz5M0... Sweet,所以问题正是我想的那样:data 是一个字符串,data.text 将返回 undefined(因为字符串没有 text 属性),这意味着您有效地调用 admin.auth().listUsers(50, undefined)admin.auth().listUsers(50) 相同 - 所以没有令牌,结果相同。 【参考方案1】:

好的,现在可以了。我犯了一个错误。下一行:

const requestedPageToken = data.text;

应该是:

const requestedPageToken = data;

我不确定此更改如何影响函数返回的内容,但它现在仍然有效。

【讨论】:

以上是关于Firebase云功能Admin SDK - 列出用户 - 分页问题的主要内容,如果未能解决你的问题,请参考以下文章

Firebase Admin SDK sendToTopic 不起作用

无法获取使用Admin SDK Firebase的用户列表

Firebase Admin SDK、FCM 云消息传递

firebase 云功能中带有 typescript 的 firebase-admin

Firebase Cloud Messaging:Firebase Admin SDK 中的设备组发送支持

Firebase 的云功能 - 即使我正在为 firebase-admin 功能发出出站 http 请求,也会出现网络错误