数据库结构如下所示
-LGw89Lx5CA9mOe1fSRQ {
uid: "FzobH6xDhHhtjbfqxlHR5nTobL62"
image: "https://pbs.twimg.com/profile_images/8950378298..."
location: "Lorem ipsum, lorem ipsum"
name: "Lorem ipsum"
provider: "twitter.com"
}
如何以编程方式删除所有内容,包括-LGw89Lx5CA9mOe1fSRQ
密钥?
我看了这个,但它已经过时且已弃用 Firebase:removeUser((,但需要删除存储在该 uid 下的数据
我也看过这个,但这需要用户不断登录(我将用户 ID 保存在localStorage
中(,如果我编写firebase.auth().currentUser
,它会在刷新时返回null
。数据记录和用户帐户是通过社交网络提供商创建的,我可以在Firebase控制台的">身份验证"和"数据库"选项卡上看到数据。
我已经尝试过这些代码,但它什么也没做。
// currentUser has a value of UID from Firebase
// The value is stored in localStorage
databaseChild.child(currentUser).remove()
.then(res => {
// res returns 'undefined'
console.log('Deleted', res);
})
.catch(err => console.error(err));
最重要的是,我需要一键同时从"身份验证"选项卡和数据库中删除用户(具有特定 UID(。
我知道有一个 Firebase 管理员 SDK,但我正在创建一个单页应用程序,并且没有任何后端代码。一切都在前端完成。
感谢任何形式的帮助。
在@jeremyw和@peter-haddad的建议下,我能够得到我想要的。以下是托管在 Firebase Cloud Functions 上的代码
const functions = require('firebase-functions'),
admin = require('firebase-admin');
admin.initializeApp();
exports.deleteUser = functions.https.onRequest((request, response) => {
const data = JSON.parse(request.body),
user = data.uid;
// Delete user record from Authentication
admin.auth().deleteUser(user)
.then(() => {
console.log('User Authentication record deleted');
return;
})
.catch(() => console.error('Error while trying to delete the user', err));
// Delete user record from Real Time Database
admin.database().ref().child('people').orderByChild('uid').equalTo(user).once('value', snap => {
let userData = snap.val();
for (let key of Object.keys(userData)) {
admin.database().ref().child('people').child(key).remove();
}
});
response.send(200);
});
此外,如果您遇到 CORS 错误,请将mode: 'no-cors'
选项添加到您的fetch()
函数中,它将毫无问题地工作。
如果您想在客户端上保留操作,您已经找到的用于删除用户登录帐户客户端的链接是您唯一的选择。通常,出于安全原因,您希望在服务器上保留大多数操作,例如创建/删除帐户,Firebase 会强制解决此问题。您只能在最近登录时删除您的帐户,您不能让客户端开始删除旧/随机帐户。
更好的选择是创建自己的云函数来处理与删除用户相关的所有内容。您必须使用已经为此找到的管理 SDK...但您可以让该云函数执行任意数量的操作 - 它必须从身份验证选项卡中删除用户,并删除数据库中的匹配数据。