【问题标题】:Can I prevent background sync of firestore from old version client?我可以阻止旧版本客户端的 Firestore 后台同步吗?
【发布时间】:2018-02-05 08:49:13
【问题描述】:

我想使用持久模式(PersistenceEnabledtrue)控制 google-firebase 的 firestore 数据库的后台同步。

恐怕旧版本的客户端,离线工作,不知道应用程序的版本升级(有一些破坏性更新),当更改为在线时,可能会将本地数据上传到服务器。 在这种情况下,我想检查当前的应用版本并在同步前允许/不允许。

有什么解决办法吗?

【问题讨论】:

    标签: firebase google-cloud-firestore offlineapps


    【解决方案1】:

    缓存中的数据仅在您将侦听器/观察器附加到它时才会更新。离线缓存中的数据不会自动同步。

    这意味着您可以在附加任何观察者之前向应用程序启动代码添加版本检查。只需将database-version 字段存储在全局文档中,并在应用程序启动时对其进行检查。如果版本高于应用程序处理的版本,则显示升级提示。

    【讨论】:

    • 感谢您的申请,但是,如果应用程序离线启动,检查很困难,不是吗?还是global document 表示重要的一点?
    • 不,“全局文档”没有神奇的含义。它只是一个文档,用于存储诸如此类的变量。
    • 但我建议不要依赖应用程序版本进行写入验证。相反,只需创建验证数据结构的安全规则。这样,服务器将始终根据最新规则进行验证。如果来自老客户的写入违反了这些规则,他们将被拒绝。所以:使用版本号来确保您的应用代码可以处理数据,使用安全规则来确保您的应用写入验证(并拒绝来自旧应用的写入不再符合要求的数据的写入)。
    • 我知道规则,但是auth信息没有版本信息,不是吗?在这种情况下,我该怎么办?我考虑如下规则:match /documents/wantToPrevent { allow read, write: if request.resource.data.current_version >= X.X; } 但是,此策略需要所有文档的current_version 数据字段。这很难看,所以我想尽可能避免。
    猜你喜欢
    • 2019-05-02
    • 2019-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-12
    • 2019-12-25
    • 2013-11-21
    • 1970-01-01
    相关资源
    最近更新 更多