[英]Delete Firebase Users programmatically with Node.js
我将 Firebase SDK 与 Node.js 一起使用,并尝试以编程方式删除大量帐户(由其 email 地址标识)。
有效的方法是在我的 firebase-delete-users.js 文件中对这些帐户进行硬编码,如下所示:
const uids = [
{email: 'user1@example.com'},
{email: 'user2@example.com'},
];
const markedForDelete = [];
// Retrieve a batch of user accounts.
admin.auth().getUsers(uids)
.then((result) => {
result.users.forEach((user) => {
markedForDelete.push(user.uid);
});
result.notFound.forEach((uid) => {
console.log(`No user found for identifier: ${JSON.stringify(uid)}`)
});
})
.then(() => {
// Delete all marked user accounts in a single API call.
return admin.auth().deleteUsers(markedForDelete);
});
但是,如果我尝试从 .txt 文件中获取这些元素,它就不再起作用了,其中每一行都是一个数组元素。
var uids = fs.readFileSync("accounts-to-delete.txt", 'utf8').toString().split("\n");
帐户删除.txt :
{email: 'user1@example.com'}
{email: 'user2@example.com'}
如果我比较 uids 和 uids2,控制台日志看起来也不完全一样,但我不明白原因以及如何解决它:
var uids = fs.readFileSync("accounts-to-delete.txt", 'utf8').toString().split("\n");
const uids2 = [
{email: 'user1@example.com'},
{email: 'user2@example.com'},
];
for(i in uids) {
console.log(uids[i]);
}
for(i in uids2) {
console.log(uids2[i]);
}
如果有助于找到解决方案:
它不一定是 .txt 文件 if.json 或其他一些更适合此用例的文件类型。
从文件中读取文本和迭代对象数组的元素是完全不同的任务。 除了迭代之外,它们几乎没有共同点。
您迭代对象数组的代码只是利用了uids2
中的数据已经结构化为 Javascript arrays 和 object 的事实。从文件中读取原始文本行的方式不同。
您读取文件的代码无法采用原始形式的数据的 JSON 结构。 uids
只是一个字符串数组。 您将必须解析 JSON 并使用JSON.parse()将每一行转换为实际的 JavaScript 对象。 这样的事情可能会起作用:
var uids = fs
.readFileSync("accounts-to-delete.txt", 'utf8')
.toString()
.split("\n")
.map(line => JSON.parse(line));
有了这个uids
,就不仅仅是一个字符串数组,就像以前那样。 它现在是一个包含 JavaScript 个对象的数组,更易于使用。
fs.readFileSync("accounts-to-delete.txt", 'utf8').toString().split("\n");
返回一个字符串数组,而不是你想要的数组或对象。
所以你可以使用JSON.parse()
来解析每条分割线。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.