【问题标题】:Firestore use database/server time for queryFirestore 使用数据库/服务器时间进行查询
【发布时间】:2018-11-13 14:59:21
【问题描述】:

我在 Firestore 中有一个 collection,其中包含接下来 365 天的字符串。它实际上是我们的应用需要在特定日期显示的代码字。

我们注意到,如果用户更改日期并返回应用程序,Firestore 会正确返回当天的代码字,因为我们的查询使用今天的日期来查询代码字。

以前,我们在服务器上有一个定制的 API,它会根据服务器的时间进行获取,以确保不会发生这种情况。

使用 Firestore 复制此行为的最佳方式是什么?我能想到的唯一方法是停止将所有数据存储在数据库中,并每天从服务器托管的文件中注入它。这可能是最好的方法,但想在选择此解决方案之前提出问题。

这是我们当前的查询

const codeword = await firebase
  .firestore()
  .collection('emoji')
  .where('valid_from', '>=', new Date())
  .limit(1)
  .orderBy('valid_from', 'asc')
  .get();

// today's codeword is "whatever" based on the client time
// ... can I use the server's time instead?

【问题讨论】:

    标签: javascript firebase google-cloud-firestore


    【解决方案1】:

    您不能在查询中使用服务器的时间,因为您查询的值必须来自客户端。但是您可能可以保护数据以仅允许用户读取“今天”的数据。由于您会在 Firestore 的服务器端安全规则中执行此操作,因此您可以在其中使用服务器端时间戳。

    可以使用query-filter based on document fieldsrequest.time 字段保护您当前的查询。

    您还可以考虑前面的查询,并且每个日期只制作一个文档,即使用像 2018-11-13 这样的 ID,然后:1) 让客户请求今天的文档,2) 限制对该特定文档的访问在安全规则中。

    【讨论】:

    • 非常感谢弗兰克。我不了解服务器端安全规则,我会好好阅读。
    • 酷。让我知道如果不能让它工作。或者实际上,如果你 do 让它工作。这些类型的规则总是特别挑剔,但从我的扫描来看,应该可以用规则来保护它。
    猜你喜欢
    • 1970-01-01
    • 2021-05-30
    • 2023-01-31
    • 2017-04-10
    • 2019-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多