Firebase 总用户数
Posted
技术标签:
【中文标题】Firebase 总用户数【英文标题】:Firebase total user count 【发布时间】:2016-03-09 14:20:20 【问题描述】:有没有办法在 firebase 中获取所有用户的计数? (通过密码、facebook、twitter 等进行身份验证)所有社交和电子邮件和密码身份验证用户的总数。
【问题讨论】:
【参考方案1】:没有内置方法可以获取用户总数。
您可以保留 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());
);
【讨论】:
所以你说我不能真正依赖 firebase 的用户身份验证系统,我必须创建一些东西来保存新的用户 ID。我理解正确吗? Firebase 身份验证仅适用于对用户进行身份验证。如果您想对这些数据进行操作,请将其存储在 Firebase 数据库中。 好的,很公平。我希望至少可以访问所有用户 ID 或类似的东西:) 我接受这个作为答案 对于交易,你无法确定用户(黑客)如何操纵数字【参考方案2】:使用Cloud Functions:
exports.updateUserCount = functions.auth.user().onCreate(user =>
return admin.database().ref('userCount').transaction(userCount => (userCount || 0) + 1);
);
请注意,当使用自定义令牌创建用户时,不会触发 Cloud Functions 事件。在这种情况下,您需要执行以下操作:
exports.updateUserCount = functions.database.ref('users/userId').onCreate(() =>
return admin.database().ref('userCount').transaction(userCount => (userCount || 0) + 1);
);
【讨论】:
【参考方案3】:2021 年更新
偶然发现了这个问题,想分享三种获取注册用户总数的方法。
? 在控制台中查看
进入console,在Authentication标签下,可以直接读取用户列表下的用户数: 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 了解如何计算文档)
【讨论】:
【参考方案4】:这是一个用于此目的的 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
);
【讨论】:
以上是关于Firebase 总用户数的主要内容,如果未能解决你的问题,请参考以下文章