Эмулятор Google Cloud Functions не взаимодействует с @ firebase / testing локально - PullRequest
0 голосов
/ 03 октября 2019

Я тестирую свои правила безопасности firebase firestore и облачные функции локально. В моем тестовом примере я создаю пользователя, а затем снова его обновляю. Однако перед обновлением облачные функции должны были запуститься и создать сопоставление, используемое в правиле безопасности обновления, но, похоже, это не происходит локально.

rules_version = '2';

service cloud.firestore {

  function userName() {
    return get(/databases/$(database)/documents/uid_to_user_name/$(request.auth.uid))
      .data
      .userName;
  }

  match /databases/{database}/documents {
    match /user/{userName} {
      allow read: if signedIn();
      allow create: if signedIn()
        && isValidUser(request.resource.data)
        && request.resource.data.uid == request.auth.uid
        && request.resource.data.name == userName;
      allow update: if signedIn()
        && isValidUser(request.resource.data)
        && request.resource.data.name == resource.data.name
        && request.resource.data.name == userName
        && request.resource.data.name == userName();
      allow delete: if false;
    }
  }
}

И у меня есть облачная функция, которая запускаетonWrite для / user / {userName}, который создает поиск uid-> userName в таблице с именем uid_to_user_name. Проблема в том, что когда я использую @firebase/testing и запускаю firebase emulators:start --only firestore,functions, создается впечатление, что эти две службы взаимодействуют не полностью. Например, когда я создаю пользователя, он проходит мои правила безопасности, и я также вижу, что триггер onWrite был активирован. Однако, когда я сплю в течение 5 секунд и пытаюсь обновить этого пользователя, правило безопасности не выполняется, потому что сопоставление в uid_to_username равно undefined. Любопытно, что в течение этого времени я также сохраняю и извлекаю значение из uid_to_username из облачной функции, и оно присутствует. Таким образом, кажется, что операции записи облачного пожарного хранилища запускают облачные функции, но записи, выполняемые в облачных функциях, не обновляют эмулятор пожарного хранилища. Есть ли способ настроить это?

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