Cloud Functions for Firebase:获取数据库的实际时间戳

Cloud Functions for Firebase: get actual timestamp of database

我需要获取 firebase 数据库服务器的实际时间戳而不是占位符 firebase.database.ServerValue.TIMESTAMP

为了避免 XY 问题,我将提供我的两个用例:

a) 我使用云函数和 JWT 创建了自己的重置密码系统。用户请求重置密码。我签署了一个包含他们的用户名和当前时间戳(当前使用 Date.now())的对象,并将其嵌入 link 发送到他们的电子邮件。当他们打开 link 时,我需要验证 JWT,并将其与存储在 firebase 数据库中 uid 下的时间戳进行比较。我还更新了数据库中的时间戳,这样下次他们尝试使用相同的令牌时,它将显示为已过期(即使我为令牌设置的 1 小时到期时间尚未过去)。在这里使用 Date.now() 就够了吗?如何将当前的 firebase 时间传递给 jwt.sign().

b) 我需要在数据库中存储所有帖子的 creationTimestamp 的否定版本,以便进行排序。 -firebase.database.ServerValue.TIMESTAMP 不起作用。正确的做法是什么?

Google 通过 great trouble 以确保所有服务器的时间尽可能同步。因此,如果您是 Cloud Functions 中的 运行 代码,它最终位于 Google 服务器上,并且您想知道另一个 Google 服务器(例如您的实时数据库)上的时间,只需使用 Date.now()。当 运行 在 Cloud Functions.

时,不需要为时间戳使用特殊的数据库令牌

当代码在 运行 时钟可能不太同步的客户端设备上时,该时间戳记号很有用。