繁体   English   中英

如何从Firebase中的实时数据库中删除具有UID的用户?

[英]How to delete a user with UID from Real Time Database in Firebase?

数据库结构如下所示

-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下的数据

我也看过这个 ,但这需要用户不断登录(我在localStorage保存用户ID),如果我写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 Admin SDK,但我正在创建一个单页应用程序 ,我没有任何后端代码。 一切都在前端完成。

任何形式的帮助表示赞赏。

根据@jeremyw和@ peter-haddad的建议,我能够得到我想要的东西。 以下是Firebase云功能上托管的代码

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错误,请为您的fetch()函数添加mode: 'no-cors'选项,它将正常工作。

如果要将操作保留在客户端上,则您已找到的用于删除用户登录帐户客户端的链接是您唯一的选择。 通常,出于安全原因,您希望保留服务器上的帐户创建/删除等大部分操作,Firebase会强制解决问题。 如果您最近登录,则只能删除您的帐户,您不能让客户端开始删除旧/随机帐户。

更好的选择是创建自己的云功能来处理与删除用户相关的所有内容。 您必须使用已经为此找到的Admin SDK ...但您可以让Cloud Function执行任意数量的操作 - 它必须从Auth选项卡中删除用户,并删除匹配的数据数据库。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM