Firestore использует базу данных / время сервера для запроса - PullRequest
0 голосов
/ 13 ноября 2018

У меня есть collection в Firestore, который содержит строку на следующие 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?

1 Ответ

0 голосов
/ 13 ноября 2018

Нельзя использовать время сервера в запросе, поскольку запрашиваемое вами значение должно исходить от клиента.Но вы, вероятно, могли бы защитить данные, чтобы позволить пользователю только читать данные за «сегодня».И поскольку вы делаете это в правилах безопасности Firestore на стороне сервера, вы можете использовать в нем временную метку на стороне сервера.

Ваш текущий запрос может быть защищен с помощью фильтра запросов на основе полей документа. и поле request.time.

Можно также рассмотреть возможность отказа от запроса и создания отдельного документа на каждую дату, то есть с идентификатором, подобным 2018-11-13, а затем:1) попросить клиента запросить документ на сегодня, 2) ограничить доступ к этому конкретному документу в правилах безопасности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...