如何将数据链接到用户?
就我而言,我的博客上有一个评论部分,用户可以发表评论。
结构看起来像这样:
- posts
- My First Post
- content: "a big string of the post content"
- data: "Date Created"
- image: "Image URL"
- imagecaption: "Image Caption"
- comments
- ???
现在根据评论,有这样的事情会很好:
- comments
- HbsfJSFJJSF (Comment ID)
- user: (User Reference)
- comment: "Nice Blog!"
现在我明白我可以这样:
- comments
- HbsfJSFJJSF (Comment ID)
- user: user_uid
- comment: "Nice Blog!"
但是有问题(?)如果帐户被删除(我有该功能),评论将不会被删除。
是否有正确的方法将数据(评论)链接到用户,以便在删除用户帐户时删除评论,或者至少有一种方法可以删除与用户对应的评论帐户被删除?
答案 0 :(得分:2)
Firebase实时数据库中没有针对托管链接的内置支持。所以这取决于您编写的代码。
这通常意味着您将拥有一个处理用户删除的中心功能(可能在Cloud Functions for Firebase中)。然后,此函数调用Firebase身份验证以删除用户,并更新数据库以删除对用户的引用。
还有一个开源项目旨在使这种清理操作更简单/更可靠:https://github.com/firebase/user-data-protection
答案 1 :(得分:2)
您在每个评论节点下使用user: user_uid
的想法可行,并称为denormalisation and fanout。
使用此方法,您可以通过执行查询来获取级联删除,以获取user
值等于当前用户ID的所有注释,并删除每个注释,如:
var commentsRef = firebase.database().ref('comments');
var userId = firebase.auth().currentUser.uid;
commentsRef.orderByChild('user').equalTo(userId).once('value', function(snapshot) {
snapshot.forEach(function(childSnapshot) {
var commentKey = childSnapshot.key;
commentsRef.child(commentKey).remove();
});
});
要确保在删除用户后在幕后执行此操作,您可以将上述逻辑移动到由删除请求触发的Cloud Function。