Если вы записываете Date.now()
с клиента в базу данных, вы записываете клиентскую метку времени.Если, с другой стороны, вы пишете firestore.FieldValue.serverTimestamp
, это приводит к записи серверной отметки времени.
Существует несколько типов изменений между ними:
- Временная метка на клиенте часто отличается от фактического времени на сервере, что означает, что эти два значения будут разными.
- Если вы пишете временную метку от клиента, это означает, что злоумышленник можетукажите свое значение.
- Клиент гарантированно будет иметь некоторую задержку при подключении к базе данных, что означает, что даже на идеально настроенном клиенте и с совершенно дружественным пользователем все еще будетРазница между значениями.
- Если вы используете временную метку сервера, вы можете применить ее значение в правилах безопасности.См. Документацию по
Request.time
для получения информации об этом.
Обратите внимание, что существуют допустимые варианты использования для использования любого из значений.Например:
- Если вы хотите записать, когда пользователь инициировал действие в своих собственных терминах, вам нужно использовать временную метку на стороне клиента.
- Если вы хотитеДля записи, когда некоторые данные были окончательно записаны в базу данных, вам нужно использовать временную метку на стороне сервера.