exports.scheduledFunctionCrontab = functions.pubsub.schedule('5 20 * * *')
.timeZone('Asia/Seoul') // Users can choose timezone - default is America/Los_Angeles
.onRun((context) =>
{
var allUsers = [];
return admin.auth().listUsers()
.then(function (listUsersResult)
{
listUsersResult.users.forEach(function (userRecord)
{
// For each user
var userData = userRecord.toJSON();
allUsers.push(userData.uid);
console.log(allUsers);
});
//res.status(200).send(JSON.stringify(allUsers));
}).then(function ()
{
allUsers.forEach(function (elem)
{
db.ref(`Data/${elem}/Enter`).update({ test: 0, test2: 0 });
});
})
.catch(function (error)
{
console.log("Error listing users:", error);
//res.status(500).send(error);
});
});
我想在通过listUser((获取uid后修改以所有用户的uid为键的数据库值,但listUser(((有1000最大值。如果有一个好方法可以获取所有用户的uid,请告诉我
Firebase Admin SDK支持分页,以循环使用所有注册的用户帐户。请按照文档中的说明进行操作。您将需要使用API循环通过1000或更少的批次。文档中提供的代码示例说明了这一点:
function listAllUsers(nextPageToken) { // List batch of users, 1000 at a time. admin.auth().listUsers(1000, nextPageToken) .then(function(listUsersResult) { listUsersResult.users.forEach(function(userRecord) { console.log('user', userRecord.toJSON()); }); if (listUsersResult.pageToken) { // List next batch of users. listAllUsers(listUsersResult.pageToken); } }) .catch(function(error) { console.log('Error listing users:', error); }); } // Start listing users from the beginning, 1000 at a time. listAllUsers();
补充前面的正确答案。您还可以使用递归返回所有用户记录(UserRecord[]
(。
import * as FAdmin from 'firebase-admin/lib/auth'
export const findUnusedUsers = functions.https.onCall((data, context) => {
return listAllUsers().then(allUsers => {
return allUsers
})
})
const listAllUsers = (nextPageToken?: string, accumulatorUsers: FAdmin.auth.UserRecord[] = []): Promise<FAdmin.auth.UserRecord[]> => {
return admin.auth().listUsers(1000, nextPageToken)
.then(function(listUsersResult) {
const users = [...accumulatorUsers, ...listUsersResult.users]
if (listUsersResult.pageToken) {
return listAllUsers(listUsersResult.pageToken, users)
} else {
return users
}
})
}