【问题标题】:Firebase snapshot listeners with authentication具有身份验证的 Firebase 快照侦听器
【发布时间】: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


【解决方案1】:

两者都是添加快照监听器的有效方法,但如果您有一个登录用户 persistence 作为 localsession,则无需添加 authchangeState每次听者;可以直接用第二种方法

【讨论】:

  • 如果我使用第二种方法,是否需要取消订阅快照侦听器?如果需要,我该怎么做?
猜你喜欢
  • 2018-10-17
  • 2017-11-04
  • 2012-09-15
  • 2019-03-23
  • 2018-12-05
  • 2021-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多