如何在Angularfire中进行级联删除?

时间:2015-02-15 17:33:19

标签: angularjs firebase angularfire

如何以最佳方式删除用户及其个人资料(个人资料中有自己的节点以$ uid为关键字)以最佳方式在Firebase中删除?

我应该在配置文件上执行$ remove()然后再使用$ userRemove(),还是有更好的方法?如果我正确设置了规则,我删除用户后就无法访问配置文件,因为只有用户才能对配置文件具有写入权限。

"profiles": {
  "$uid": {
    // grants write access to the owner of this profile whose uid must exactly match the key ($uid)
    ".write": "auth !== null && auth.uid === $uid",
    // grants read access to any user who is logged in with an email and password
    ".read": "auth !== null && auth.provider === 'password'"
  }
}

这就是我认为它可以完成的方式,但是如果其中一个呼叫通过而不是另一个呼叫会发生什么,那么它就会留下不一致的用户/个人资料。

var firebaseObj = new Firebase(FBURL),
    Auth = $firebaseAuth(firebaseObj);

var profileObj = $firebase(firebaseObj.child('profiles').child(user.uid)).$asObject();

profileObj.$remove().then(function(data) {
    return Auth.$removeUser(user);
}).then(function(data) {
    console.log('successfully removed user and profile');
});

注意:我没有测试过上面的代码,只是想让其他人想到如何做到这一点,并提供一个如何做到的粗略示例。

1 个答案:

答案 0 :(得分:1)

删除用户不会使身份验证令牌失效,也不会将用户从帐户中注销。这是对OAuth令牌的常见误解 - 令牌是某种实时的生活组件,可以持续监视服务器的变化。 OAuth令牌在被撤销之前有效。

在Firebase中,OAuth令牌在以下情况下被撤消:

  • 用于创建它的秘密被撤销
  • 令牌过期

还可以<{3>}在adding a dependency中检查的数据中有效撤销security rules的访问权限。通过这种方式,即使现有令牌仍然有效,也可以防止对数据的访问。

因此,此处的排序无关紧要。您可以删除帐户并同时删除记录,而无需担心用户会以某种方式失去访问权限。

此外,这不是级联删除,因为一个操作是删除用户凭据(这是电子邮件/传递的加密哈希 - > uid),另一个是物理删除Firebase中的数据 - 这些操作是完全独立,除了您对应用程序数据的限制外,完全没有任何相关性。