Firebase总用户数

时间:2015-12-04 15:37:56

标签: javascript angularjs firebase angularfire firebase-authentication

有没有办法让所有用户都计算在firebase中? (通过密码,脸书,推特等进行身份验证)所有社交和电子邮件以及密码验证用户的总数。

4 个答案:

答案 0 :(得分:6)

没有内置方法可以获得总用户数。

您可以保留userIds的索引并将其拉下来并计算它们。但是,这需要下载所有数据才能获得计数。

{
  "userIds": {
    "user_one": true,
    "user_two": true,
    "user_three": true 
  }
}

然后在下载数据时,您可以拨打snapshot.numChildren()

var ref = new Firebase('<my-firebase-app>/userIds');
ref.once('value', function(snap) {
  console.log(snap.numChildren());
});

如果您不想下载数据,可以使用transactions维持总计数。

var ref = new Firebase('<my-firebase-app>');
ref.createUser({ email: '', password: '', function() {
  var userCountRef = ref.child('userCount');
  userCountRef.transaction(function (current_value) {
    // increment the user count by one
    return (current_value || 0) + 1;
  });
});

然后您可以实时收听用户:

var ref = new Firebase('<my-firebase-app>/userCount');
ref.on('value', function(snap) {
  console.log(snap.val());
});

答案 1 :(得分:3)

2021 年更新

我偶然发现了这个问题,想分享三种获取注册用户总数的方法。

? 在控制台中查看

进入console,在Authentication选项卡下,可以直接读取用户列表下的用户数: enter image description here 56个用户!耶!

? 使用管理 SDK

为了以编程方式访问具有潜在过滤器的提供者类型、注册日期、最后连接日期的用户数量……您可以编写一个利用 listUsers from the admin SDK 的脚本。
例如,统计自 3 月 16 日以来注册的用户:

const admin = require("firebase-admin");
const serviceAccount = require("./path/to/serviceAccountKey.json");
admin.initializeApp({ credential: admin.credential.cert(serviceAccount) });

async function countUsers(count, nextPageToken) {
    const listUsersResult = await admin.auth().listUsers(1000, nextPageToken);

    listUsersResult.users.map(user => {
        if (new Date(user.metadata.creationTime) > new Date("2021-03-16T00:00:00")) {
            count++;
        }
    });

    if (listUsersResult.pageToken) {
        count = await countUsers(count, listUsersResult.pageToken);
    }

    return count;
}

countUsers(0).then(count => console.log("total: ", count));

? 将用户存储在数据库中

您的应用可能已经将用户文档存储在 Firestore、实时数据库或任何其他数据库中。您可以统计这些记录以获得注册用户的总数。 (如果您使用 Firestore,您可以阅读my article 如何计算文档数)

答案 2 :(得分:1)

使用Cloud Functions

exports.updateUserCount = functions.auth.user().onCreate(user => {
  return admin.database().ref('userCount').transaction(userCount => (userCount || 0) + 1);
});

请注意,使用自定义令牌创建用户时,云函数事件会被触发。在这种情况下,您需要执行以下操作:

exports.updateUserCount = functions.database.ref('users/{userId}').onCreate(() => {
  return admin.database().ref('userCount').transaction(userCount => (userCount || 0) + 1);
});

答案 3 :(得分:0)

这是一个用于此目的的javascript模块 - https://gist.github.com/ajaxray/17d6ec5107d2f816cc8a284ce4d7242e

单行,它的作用是什么 -

  

保持Firebase网络应用程序中在线用户的列表(和计数) - 由隔离的房间或全球

用于计算使用此模块的所有用户 -

firebase.initializeApp({...});
var onlineUsers = new Gathering(firebase.database());
gathering.join();

// Attach a callback function to track updates
// That function will be called (with the user count and array of users) every time user list updated
gathering.onUpdated(function(count, users) {
    // Do whatever you want
});