如何以最佳方式删除用户及其个人资料(个人资料中有自己的节点以$ 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');
});
注意:我没有测试过上面的代码,只是想让其他人想到如何做到这一点,并提供一个如何做到的粗略示例。
答案 0 :(得分:1)
删除用户不会使身份验证令牌失效,也不会将用户从帐户中注销。这是对OAuth令牌的常见误解 - 令牌是某种实时的生活组件,可以持续监视服务器的变化。 OAuth令牌在被撤销之前有效。
在Firebase中,OAuth令牌在以下情况下被撤消:
还可以<{3>}在adding a dependency中检查的数据中有效撤销security rules的访问权限。通过这种方式,即使现有令牌仍然有效,也可以防止对数据的访问。
因此,此处的排序无关紧要。您可以删除帐户并同时删除记录,而无需担心用户会以某种方式失去访问权限。
此外,这不是级联删除,因为一个操作是删除用户凭据(这是电子邮件/传递的加密哈希 - > uid),另一个是物理删除Firebase中的数据 - 这些操作是完全独立,除了您对应用程序数据的限制外,完全没有任何相关性。