当我退出应用程序时,我收到此错误:
Error: permission_denied at /users/KuehJHDJ15SfS1s6FIh1: Client doesn't have permission to access the desired data.
at G (firebase.js:432)
at Object.G (firebase.js:456)
at Pg (firebase.js:398)
at Eg.g.wd (firebase.js:391)
at sg.wd (firebase.js:381)
at bg.hg (firebase.js:379)
at eg (firebase.js:363)
at WebSocket.La.onmessage (firebase.js:362)
我怀疑我的问题与此非常相关: Refs not rerunning after onAuthStateChanged changes Firebase 3.0.0
这是我的安全规则:
{
"rules": {
"users": {
".read": "auth != null && root.child('hashlist/'+root.child('users/'+auth.uid+'/hash').val()).val() == auth.email",
".write": "auth != null"
},
"hashlist": {
".read": true,
".write": "auth != null && root.child('users/'+auth.uid+'/role').val() == 'admin'"
}
}
}
感谢您的帮助,谢谢。
答案 0 :(得分:3)
引发错误是因为在注销发生后,refs会继续侦听更改,并且一旦注销,安全规则就会阻止它们这样做。
为防止出现这些错误,您需要在退出之前拨打任何正在侦听的裁判off
。
这样做没有自动化设施;这是你必须自己管理的事情。你应该:
$scope.$on("$destroy", ...)
关闭范围内的侦听引用(自从我使用Angular JS已经很长时间了,所以我的内存在这里可能有点不可靠)。once
留下悬空的听众。AngularFire
,它为对象和数组提供了一些很好的绑定,并自行连接(如果我没记错的话),以便在范围被破坏时关闭其内部侦听引用。