Süh*_*kçu 4 javascript angularjs firebase angularfire firebase-authentication
有没有办法让所有用户都计入firebase?(通过密码,脸书,推特等进行身份验证)所有社交和电子邮件及密码验证用户的总数.
我偶然发现了这个问题,想分享三种获取注册用户总数的方法。
进入控制台,在 Authentication 选项卡下,可以直接读取用户列表下的用户数量:
56 位用户!耶!
要以编程方式访问用户数量,并可能根据提供商类型、注册日期、上次连接日期进行过滤...,您可以利用管理 SDK 中的 listUsers编写一个脚本。
例如,要统计 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));
Run Code Online (Sandbox Code Playgroud)
您的应用程序可能已将用户文档存储在 Firestore、实时数据库或任何其他数据库中。您可以统计这些记录以获得注册用户的总数。(如果你使用Firestore,可以阅读我关于如何统计文档的文章)
没有内置方法可以获得总用户数.
您可以保留userIds的索引并将其拉下来并计算它们.但是,这需要下载所有数据才能获得计数.
{
"userIds": {
"user_one": true,
"user_two": true,
"user_three": true
}
}
Run Code Online (Sandbox Code Playgroud)
然后在下载数据时,您可以调用snapshot.numChildren():
var ref = new Firebase('<my-firebase-app>/userIds');
ref.once('value', function(snap) {
console.log(snap.numChildren());
});
Run Code Online (Sandbox Code Playgroud)
如果您不想下载数据,则可以使用事务维护总计数.
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;
});
});
Run Code Online (Sandbox Code Playgroud)
然后您可以实时收听用户:
var ref = new Firebase('<my-firebase-app>/userCount');
ref.on('value', function(snap) {
console.log(snap.val());
});
Run Code Online (Sandbox Code Playgroud)
使用云函数:
exports.updateUserCount = functions.auth.user().onCreate(user => {
return admin.database().ref('userCount').transaction(userCount => (userCount || 0) + 1);
});
Run Code Online (Sandbox Code Playgroud)
请注意,使用自定义令牌创建用户时不会触发Cloud Functions 事件。在这种情况下,您需要执行以下操作:
exports.updateUserCount = functions.database.ref('users/{userId}').onCreate(() => {
return admin.database().ref('userCount').transaction(userCount => (userCount || 0) + 1);
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6679 次 |
| 最近记录: |