如何在 Angularfire 中进行级联删除?
How to do a cascading remove in Angularfire?
如何在 Firebase 中以最佳方式删除用户和 his/her 配置文件(配置文件有自己的节点,以 $uid 作为键)?
我应该先对配置文件执行 $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'"
}
}
这就是我认为可以完成的方式,但是如果其中一个调用通过而不是另一个调用会发生什么情况,那么它就是不一致的 user/profile。
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');
});
注意:我没有测试上面的代码,只是想了解其他人对如何做到这一点的想法,并提供一个粗略的例子来说明我是如何做到的。
删除用户不会使授权令牌失效,也不会从帐户中注销用户。这是对 OAuth 令牌的一个常见误解——认为令牌是某种实时、活动的组件,不断监视服务器的变化。 OAuth 令牌在被撤销之前一直有效。
在 Firebase 中,OAuth 令牌在以下情况下被撤销:
- 用于创建它的秘密已被撤销
- 令牌过期
也可以通过 adding a dependency in the data which is checked in security rules有效地 撤销访问权限。这样,即使现有令牌仍然有效,也可以阻止对数据的访问。
因此这里的顺序无关紧要。您可以同时删除帐户和删除记录,而不必担心用户会以某种方式失去访问权限。
此外,这不是级联删除,因为一个操作是删除用户凭据(这是 email/pass -> uid 的加密哈希),另一个是从 Firebase 中物理删除数据--这些操作是完全独立的,除了您对应用程序的数据施加的限制外,完全不相关。
如何在 Firebase 中以最佳方式删除用户和 his/her 配置文件(配置文件有自己的节点,以 $uid 作为键)?
我应该先对配置文件执行 $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'"
}
}
这就是我认为可以完成的方式,但是如果其中一个调用通过而不是另一个调用会发生什么情况,那么它就是不一致的 user/profile。
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');
});
注意:我没有测试上面的代码,只是想了解其他人对如何做到这一点的想法,并提供一个粗略的例子来说明我是如何做到的。
删除用户不会使授权令牌失效,也不会从帐户中注销用户。这是对 OAuth 令牌的一个常见误解——认为令牌是某种实时、活动的组件,不断监视服务器的变化。 OAuth 令牌在被撤销之前一直有效。
在 Firebase 中,OAuth 令牌在以下情况下被撤销:
- 用于创建它的秘密已被撤销
- 令牌过期
也可以通过 adding a dependency in the data which is checked in security rules有效地 撤销访问权限。这样,即使现有令牌仍然有效,也可以阻止对数据的访问。
因此这里的顺序无关紧要。您可以同时删除帐户和删除记录,而不必担心用户会以某种方式失去访问权限。
此外,这不是级联删除,因为一个操作是删除用户凭据(这是 email/pass -> uid 的加密哈希),另一个是从 Firebase 中物理删除数据--这些操作是完全独立的,除了您对应用程序的数据施加的限制外,完全不相关。