我拥有此脚本,该脚本可更改我们用于测试目的的现有FireBase身份验证用户的所有密码,以将用户重置为“干净”状态。
var admin = require('firebase-admin');
// Input args
var jsonKey = process.argv[2];
var projectId = process.argv[3];
var newPassword = process.argv[4];
var serviceAccount = require(jsonKey);
admin.initializeApp({
credential: admin.credential.cert(serviceAccount),
databaseURL: "https://" + projectId + ".firebaseio.com"
});
// FIXME Only for debug purposes
var index = 1;
/**
* https://firebase.google.com/docs/auth/admin/manage-users#update_a_user
*/
function nextUser(uid, timeout) {
setTimeout(() => {
admin.auth().updateUser(uid, {
password : newPassword
})
.then(function() {
console.log(index++ + ') Successfully updated user', uid);
})
.catch(function(error) {
console.log(index++ + ') Error updating user:', error);
});
}, timeout);
}
/**
* https://firebase.google.com/docs/auth/admin/manage-users#list_all_users
* https://stackoverflow.com/a/58028558
*/
function listAllUsers(nextPageToken) {
let timeout = 0;
admin.auth().listUsers(1000, nextPageToken)
.then(function (listUsersResult) {
console.log("Retrieved " + listUsersResult.users.length + " users");
listUsersResult.users.forEach(function (userRecord) {
timeout = timeout + 100
nextUser(userRecord.uid, timeout)
});
if (listUsersResult.pageToken) {
listAllUsers(listUsersResult.pageToken);
}
})
.catch(function (error) {
console.log('Error listing users:', error);
});
}
listAllUsers();
该脚本从本地计算机启动,带有
node <filename.js> <path of jsonkey> <projectid> <new password>
如您所见,迭代器正在超时运行,这是在我遇到Exceeded quota for updating account information
问题后尝试用this answer解决的问题,这是必需的>
脚本运行正常,所有用户均得到正确处理(我仅为这种调试添加了顺序计数器),并且不会引发“ quota”错误。问题是在脚本末尾,shell提示符没有退出,进程仍然挂起,我需要一个CTRL+C
来杀死它。除了此行为的令人讨厌的部分之外,这还阻止了更广泛的脚本,该脚本将调用此脚本,并且不会继续执行下一行命令。
似乎在完成所有setTimeout
功能之后,主过程不会自动关闭。
我该如何解决?
我拥有此脚本,该脚本可更改我们用于测试目的的现有FireBase身份验证用户的所有密码,以将用户重置为“干净”状态。 var admin = require('firebase -...
尝试在setTimeout函数中放置以下退出代码。