如何在Firebase中验证时间戳?

7xllpg7q  于 2023-06-07  发布在  其他
关注(0)|答案(2)|浏览(170)

在我的国际象棋应用程序中,我使用Firebase.ServerValue.TIMESTAMP来记录移动的时间,例如:

{
  from: 'e2',
  to: 'e4',
  playedAt: Firebase.ServerValue.TIMESTAMP
}

如何验证playedAtFirebase.ServerValue.TIMESTAMP,而不是像1408663907743这样的任意时间戳?
我希望Firebase安全规则有一个像isTimestamp()这样的方法,它的工作方式与isNumber()isString()类似,但我找不到。

ndasle7k

ndasle7k1#

Firebase中的时间戳,例如对应于服务器端宏Firebase.ServerValue.TIMESTAMP的时间戳,与任何其他数字一样存储。不存储使它们特殊的附加类型信息。因此,isTimestamp()将等价于isNumber()
如果您想进一步验证时间戳是否与当前服务器时间匹配,请参阅this related answer

nbnkbykc

nbnkbykc2#

您可以使用now特殊关键字,它等于epoch时间(毫秒)

"playedAt": {
   ".validate": "newData.isNumber() && newData.val() === now"
}

如果您是从其他来源生成时间,您可以将其转换为毫秒,并使用类似这样的东西(10 - 20秒时钟漂移)

"playedAt": {
   ".validate": "newData.isNumber() && newData.val() - 10000 < now && newData.val() + 10000 > now"
}

相关问题