嗨,好人们。 目前,我正在使用 Flutter 和 Firebase 构建一个应用程序。该应用程序的数据库结构是这样的>>
>>>>
Stores (Collection) -> *uid*(firebase generated uid) -> location(Collection) -> *lid*(unique location id)
-> items (collection)
-> orders (collection)
-> transactions (collection)
-> customer (collection)
-> .....
-> .....
-> etc collections
这是 Firestore 中的嵌套集合结构。我觉得这会让我为 Firebase-Firestore 编写更少的安全规则。我仍然不确定这个结构的安全性如何。但现在,我只会坚持这一点。 [如果需要的话,请告诉我有关此安全性的信息。谢谢]
现在,如果用户登录并通过 Firebase 进行身份验证,则 Firebase 会提供其“User”类,该类提供所有必要的身份验证数据,包括 uid。因此,关于我使用该 uid 进行的数据库设计,我可以向用户展示他第一次注册并完成入职流程时创建的商店及其可用位置(列表)。 *我需要uid的第一个功能,然后用户决定并选择一个存储位置来操作和访问相关数据。通过选择商店位置,他将该位置设置为当前商店位置,并且应用程序将用户的选择保存在本地。这意味着现在应用程序也知道 lid(唯一位置 ID)。现在,有了 lid 和 uid,用户就可以读取和写入商品(Inventory)、订单交易(Pos)等。因此,对于其他功能,lid 和 uid 两个 doc-id 都是必须的。
现在,考虑一个场景,在应用程序中,当用户想要商店位置的所有商品时,我将创建一个快照(实时数据获取)。这样,如果项目集合的某些文档被更新或删除,用户将不需要刷新屏幕。同样,还会有订单快照,也许还有更多。请记住,要访问这些子集合,我需要 uid 和 lid。
比方说,现在用户从商店位置注销[也许他/她想像食品特许经营店主一样查看商店其他位置的状况]或者更糟糕的是他/她不再喜欢该应用程序并签名从应用程序中出来。这意味着该应用程序现在没有 uid 或 lid。 但是,如果相关数据库中发生更改,那些仍在侦听和获取数据的 Firestore 实时快照会怎样呢?因为如果它们是一次性调用,我就不必担心,因为在商店注销后,我会将其从本地存储中删除,因此没有 lid 可用。 所以我的问题是,当没有经过身份验证的用户可用时,Flutter 平台的 Firebase SDK 是否会自动停止当前正在侦听 Firestore 集合的可用快照,或者我是否需要继续检查当前用户的身份验证状态和当前商店位置状态并从应用程序手动关闭快照?
抱歉,如果我写得太多,您必须阅读全部内容才能理解问题。感谢您抽出时间。
我试图解释我对 Firebase 与 Flutter 集成的疑问,我希望一些经验丰富的 Firebase-Flutter 开发人员或 Firebase 团队以及 Flutter 的 Firebase SDK 开发人员能够为我解决这个疑问,如果将来其他人有和我一样的疑问他们也将从答复中受益。因为,我找不到与此问题类似的问题。
当没有经过身份验证的用户可用时,适用于 Flutter 平台的 Firebase SDK 是否会自动停止当前正在侦听 Firestore 集合的可用快照
不,听众不会仅仅因为之前登录的用户退出而停止收听。
但是,如果存在活动的安全规则,阻止匿名用户执行之前登录时允许的查询,则该查询的侦听器将在注销后立即停止并生成错误。