Как безопасно добавить UID аутентифицированного пользователя в документ firestore? - PullRequest
1 голос
/ 06 августа 2020

Мы можем безопасно запрашивать документы, используя UID аутентифицированного пользователя, используя такие правила firestore:

service cloud.firestore {
  match /databases/{database}/documents {
    match /stories/{storyid} {
      // Only the authenticated user who authored the document can read or write
      allow read, write: if request.auth != null && request.auth.uid == resource.data.author;
    }
  }
}

Но я не могу найти, как заполнить данные с помощью UID аутентифицированного пользователя.

Приведенный ниже документ работает нормально, но он был отправлен со стороны клиента, и я не думаю, что он безопасен, так как запрос мог подделать UID другого пользователя.

{
  title: "A Great Story",
  content: "Once upon a time...",
  author: user.uid,
  published: false
}

В основном я нужно значение UID пользователя с сервера Firebase, точно так же, как мы можем вставить метку времени с сервера с помощью firestore.FieldValue.serverTimestamp()

1 Ответ

1 голос
/ 06 августа 2020

Я не думаю, что это безопасно, так как запрос мог подделать UID другого пользователя.

Добавив предложение request.auth.uid == request.resource.data.author в свое правило безопасности write, вы гарантировать, что запрос не может быть изменен с помощью uid другого пользователя.

Этот пункт проверяет, что значение поля author соответствует uid пользователя, выполняющего запись.

Дополнительные объяснения в do c, здесь и здесь , а также здесь о том, как проверяется целостность токенов ID.

Важно: Обратите внимание, что мы используем request.resource.data.author вместо resource.data.author, потому что, как объясняется в do c:

Переменная resource относится к запрошенному документу, а resource.data - это карта всех полей и значений, хранящихся в документе.

и

Переменная request.resource содержит будущее состояние документа.

Как следствие, вам, скорее всего, следует разделить правила read и write.

...