Firebase将数据链接到用户

时间:2017-11-08 09:34:38

标签: javascript firebase firebase-realtime-database firebase-authentication

如何将数据链接到用户?

就我而言,我的博客上有一个评论部分,用户可以发表评论。

结构看起来像这样:

- 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!"

但是有问题(?)如果帐户被删除(我有该功能),评论将不会被删除。

是否有正确的方法将数据(评论)链接到用户,以便在删除用户帐户时删除评论,或者至少有一种方法可以删除与用户对应的评论帐户被删除?

2 个答案:

答案 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