Проблемы безопасности Firestore с номером телефона - PullRequest
0 голосов
/ 31 августа 2018

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

service cloud.firestore {

  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if exists(/databases/$(database)/documents/access/+17777777777);
    }

    match /globals/{document=**} {
      allow read: if true;
    }

    match /requests/{document=**} {
      allow write: if true;
    }
  }
}

Если я жестко закодирую число в самом правиле, оно делает то, что должно. Если я использую $(reqest.auth.token.phone_number), это не работает.

allow read, write: if !exists(/databases/$(database)/documents/access/$(reqest.auth.token.phone_number));

Я также пытался с get согласно этот вопрос :

allow read, write: if get(/databases/$(database)/documents/access/$(reqest.auth.token.phone_number)).blocked == true ||
      get(/databases/$(database)/documents/access/$(reqest.auth.token.phone_number)).data.blocked == true;

Моя структура данных выглядит так

access | +17777777777 | blocked = true

Я также попытался перевернуть структуру:

access | blocked | +17777777777 = true

А вот полезная нагрузка аутентификации с симулятора

{
  "uid": "19687a6s87d68as7d968as7d9a8sd",
  "token": {
    "sub": "19687a6s87d68as7d968as7d9a8sd",
    "aud": "my-app",
    "email": "",
    "email_verified": false,
    "phone_number": "+17777777777",
    "name": "",
    "firebase": {
      "sign_in_provider": "google.com"
    }
  }
}

Ответы [ 2 ]

0 голосов
/ 20 декабря 2018

Я нашел решение этой проблемы! Согласно документации , пути также могут быть созданы с помощью функции path (). Таким образом, вы можете построить свой путь вручную, используя конкатенацию строк:

allow read, write: if exists(path("/databases/" + database + "/documents/access/" + request.auth.token.phone_number));
0 голосов
/ 08 октября 2018

Проблема не в методе $(reqest.auth.token.phone_number). Как указано в в этом ответе , Firestore, к сожалению, на данный момент не поддерживает значения ссылочных полей в путях документов, что является причиной того, почему работают только жестко закодированные значения.

Редактировать

Странно, но Пример Firestore все еще противоречит моему ответу выше.

...