【发布时间】:2019-12-24 17:20:59
【问题描述】:
如果之前有人问过这个问题,我深表歉意。
我已经通过 stackoverflow 进行了搜索,但没有找到我经常遇到的问题的答案。我正在开发一些使用 Firebase 开发的项目。
我经常有这样的数据结构:
collection A:
- userID
- attribute1
- attribute2
(and so on)
然后我在客户端声明一些快照监听器。我的问题是关于我应该在哪里声明我的快照监听器。
如果我的安全规则允许读取和写入集合 A(包括创建、更新和删除)如果文档的 userID 字段与登录用户的 id 相同,我应该如何声明我的快照侦听器?
我应该执行以下操作吗?
firebase.auth().onAuthStateChanged((user)=>{
firebase.firestore().collection('collectionA').where('userID', '==', firebase.auth().currentUser.uid).onSnapshot((snapshot)=>{
// DO STUFF HERE
}
)
})
或者只是
firebase.firestore().collection('collectionA').where('userID', '==', firebase.auth().currentUser.uid).onSnapshot((snapshot)=>{
// DO STUFF HERE
})
或者以上都不是?
【问题讨论】:
-
在您的第一个变体中,仅当用户状态发生变化时才使用快照侦听器。例如,当用户注销时。这对我来说没有多大意义,因为用户不再拥有 uid,因此无法再访问属性。因此,我通常更喜欢第二种变体,因为您希望用户能够一直访问他们的属性,而不仅仅是当他们的状态发生变化时?! .尽管如此,如果您包含取消订阅功能,第一个版本可能是您选择的方法。
-
如果我使用第二种变体,快照会在用户登录/注销时自动重新运行。
-
没有。对于这些事情,您应该使用第一种方法。正如@ked 所写......在大多数情况下,您可以使用第二种方法。如果您想要任何更具体的信息,您必须提供有关您计划使用此上下文的更多信息。
标签: javascript firebase google-cloud-firestore firebase-authentication