Nor*_*eng 9 firebase angularfire angular
登录后,我订阅了一些firebase引用,然后注销(FirebaseAuth.logout).一旦我注销,我在控制台中收到Firebase警告:"用户回调抛出了异常.错误:允许在...处的许可",这成为一个实际的异常.虽然我确实希望看到这种行为,但是记录用户的最佳做法是什么,所以我没有看到这个警告/异常?
小智 9
我有同样的问题.通过以下来源,到目前为止我找到了一个解决方案,但我还不满意.来源1
问题的根本在于,代码中的某处仍然存在开放的,而非取消订阅的订阅(与Firebase的连接).
比如我做了
this.name_sub = this.af.database.object("/users/" + user.uid + "/name")
.subscribe(data => {
this.globals.user.name = data.$value;
}
);
Run Code Online (Sandbox Code Playgroud)
哪个是完全没问题的,直到你调用它为止this.af.auth.logout();
.如果您的Firebase安全设置正确,Firebase将抛出错误,因为您不再登录该用户 - 您现在是匿名用户,应该在用户空间内被阻止.由于上述订阅仍然有效,Firebase会告诉您,您无法匿名访问目标用户空间.
因此,必须关闭订阅.你可以做到这一点的方法是,添加
ngOnDestroy(){
this.name_sub.unsubscribe();
}
Run Code Online (Sandbox Code Playgroud)
组件中的某个位置.当您的组件被销毁时,这将关闭您的订阅.不幸的是,这对我来说是不可能的,因为我正在另一个组件中进行注销.我现在这样做的方式是在收到一个值后立即关闭订阅.
this.name_sub = this.af.database.object("/users/" + user.uid + "/name")
.subscribe(data => {
this.globals.user.name = data.$value;
this.name_sub.unsubscribe(); // <-- important part
}
);
Run Code Online (Sandbox Code Playgroud)
对我来说,这是非常反直觉的.我认为我们需要一种方法来接收价值,而无需永久订阅数据通道,也无需导入其他模块.
归档时间: |
|
查看次数: |
1308 次 |
最近记录: |