Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在Firestore中创建具有可靠时间戳的文档?_Javascript_Firebase_Timestamp_Google Cloud Firestore - Fatal编程技术网

Javascript 如何在Firestore中创建具有可靠时间戳的文档?

Javascript 如何在Firestore中创建具有可靠时间戳的文档?,javascript,firebase,timestamp,google-cloud-firestore,Javascript,Firebase,Timestamp,Google Cloud Firestore,当firestore服务器本身无法设置firestore时间戳时,如何认为来自客户端SDK的firestore时间戳有效 一个经过身份验证的用户是否可以破解自己的时间戳?如果客户机sdk提供的时间戳数据类型不可靠,那么它有什么意义?这是否意味着我们必须使用Firebase Admin sdk在注册时创建用户数据或其他需要时间戳的内容?哪位开发人员不在每个数据集合上都加上时间戳?如果是,那么客户端sdk的意义是什么?很明显我遗漏了什么 我在firebase客户端sdk中尝试过,没有错误或时间戳 m

当firestore服务器本身无法设置firestore时间戳时,如何认为来自客户端SDK的firestore时间戳有效

一个经过身份验证的用户是否可以破解自己的时间戳?如果客户机sdk提供的时间戳数据类型不可靠,那么它有什么意义?这是否意味着我们必须使用Firebase Admin sdk在注册时创建用户数据或其他需要时间戳的内容?哪位开发人员不在每个数据集合上都加上时间戳?如果是,那么客户端sdk的意义是什么?很明显我遗漏了什么

我在firebase客户端sdk中尝试过,没有错误或时间戳

myFirestoreReference.ref.set({
  userId: firebaseUserCredential.user.uid,
  created: this.$fireStore.FieldValue.serverTimestamp()
})

上述代码成功创建了“userId”,但没有创建“created”时间戳。

您可以在安全规则中检查时间戳的有效性。此规则要求客户端在正在写入“foo”集合的文档的
created
字段中提供服务器时间戳令牌:

match /foo/{id} {
    allow write: if request.resource.data.created == request.time;
}

Firestore接收请求的时间,也是客户端上由
serverTimestamp()
生成的令牌所隐含的值。

您可以在安全规则中检查时间戳的有效性。此规则要求客户端在正在写入“foo”集合的文档的
created
字段中提供服务器时间戳令牌:

match /foo/{id} {
    allow write: if request.resource.data.created == request.time;
}

是Firestore接收请求的时间,也是客户端上由
serverTimestamp()
生成的令牌所隐含的值。

我的答案是在使用Firebase Admin sdk的api中的服务器上使用以下代码。这是一个我一直在寻找但至今没有找到的例子。下面列出的代码演示了

Firebase管理sdk=>FireStore

它是可靠的,因为它来自我的服务器,通过Firebase Admin sdk而不是Firebase客户端sdk。此外,serverTimestamp()由FireStore服务器设置,而不是由我的Web服务器(通过“new Date()”)或发出原始请求的客户端计算机设置。我能够通过从…的例子中推断出这个答案

Firebase客户端sdk=>FireStore

Firebase管理sdk=>Firebase验证


我的答案是在使用Firebase Admin sdk的api中的服务器上使用以下代码。这是一个我一直在寻找但至今没有找到的例子。下面列出的代码演示了

Firebase管理sdk=>FireStore

它是可靠的,因为它来自我的服务器,通过Firebase Admin sdk而不是Firebase客户端sdk。此外,serverTimestamp()由FireStore服务器设置,而不是由我的Web服务器(通过“new Date()”)或发出原始请求的客户端计算机设置。我能够通过从…的例子中推断出这个答案

Firebase客户端sdk=>FireStore

Firebase管理sdk=>Firebase验证



这里有5个问题。你能把你的问题缩小到一个问题吗?这是堆栈溢出的约定。也许你可以说明你正在努力完成什么,展示那些没有按照你期望的方式工作的代码,并说明它所做的与你期望的不同。谢谢你的回复。这些问题是对同一个基本问题的重述,即“如果不能创建具有可靠时间戳的记录,客户端sdk有什么意义?”能否在安全规则中创建一个添加/编辑时间戳的函数?Doug,感谢您的反馈。我决定重新命名这个问题,以便更准确地反映这个问题。将来,提问时不要大声嚷嚷,比如“我如何创建具有可靠时间戳的记录?”这里大约有5个问题。你能把你的问题缩小到一个问题吗?这是堆栈溢出的约定。也许你可以说明你正在努力完成什么,展示那些没有按照你期望的方式工作的代码,并说明它所做的与你期望的不同。谢谢你的回复。这些问题是对同一个基本问题的重述,即“如果不能创建具有可靠时间戳的记录,客户端sdk有什么意义?”能否在安全规则中创建一个添加/编辑时间戳的函数?Doug,感谢您的反馈。我决定重命名该问题,以更准确地反映问题。将来,提问时不要大声嚷嚷,如“如何创建具有可靠时间戳的记录?”谢谢Doug,我希望使用此代码,但这意味着您可以通过firebase client sdk在客户机上设置serverTimestamp(),但事实似乎并非如此。如果您使用通过firebase客户端sdk设置serverTimestamp(),请共享。听起来您有一个关于堆栈溢出的新问题要发布。上面列出的代码是FireStore安全规则,而不是设置FieldValue.serverTimestamp()的javascript。上面的代码snipit假设您已经设置了时间戳。我的问题是如何设置FieldValue.serverTimestamp()。顺便说一句,文档确实显示了FireBASE,但没有显示FireSTORE对FieldValue.serverTimestamp()的使用。那么,这个答案是FireBASE或FireSTORE实现的一部分吗?好的,我根本不是这样理解您最初的问题的,它与您留下的评论也不一致。如果您的问题只是“如何创建带有服务器时间戳的记录”,那么您需要进行大量的编辑。此外,您还应该准确地解释代码中的
这个。$fireStore
。实际上,在这一点上,我认为你最好问一个全新的问题。道格,这段代码如何解释由于请求发出和到达firestore服务器之间的延迟而导致的时间差异?谢谢道格,我希望使用这段代码,但这意味着你可以设置