Правила безопасности Firestore не работают должным образом - PullRequest
0 голосов
/ 17 октября 2019

Я пытаюсь выполнить следующую запись -

guard let userid = Auth.auth().currentUser?.uid else {fatalError()}

        let firstName = "firstName"
        let lastName = "lastName"
        let userName = "userName"
        let uid = userid

        let userInfo = [firstName:firstNameTextField.text!,
                        lastName:lastNameTextField.text!,
                        userName:userNameTextField.text!,
                        uid:userid]

        Firestore.firestore().collection("users").document(userid).setData(userInfo) { (error) in
            if error != nil {
                print(error?.localizedDescription)
            } else {
                self.performSegue(withIdentifier: "goToFeed", sender: self)
            }
        }

Это мои правила безопасности -

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read;
    }
    match /users/{userid} {
        allow read: if request.auth.uid != null;
        allow create: if request.resource.data.uid == request.auth.uid;

    }
  }
}

Эта запись запрещена при выполнении с помощью симулятора XCode с ошибкой -«Отсутствует или недостаточно разрешений.»

Однако, когда я пытаюсь построить тот же документ на имитаторе правил Firestore, это разрешается.

Кроме того, я также пытался изменить это правило к этому

match /users/{userid} {
  allow create: if request.resource.data.uid == request.auth.uid &&
userid == request.auth.uid
}

В вышеприведенном случае это отклоняется как симулятором Xcode, так и симулятором Firestore.

Что я делаю не так?

Несколько уточнений -

  1. Запись происходит идеально, если правила изменены, чтобы сделать ее открытой базой данных.

  2. Структура документов выглядит следующим образом -

let userInfo = [firstName:firstNameTextField.text!,
                      lastName:lastNameTextField.text!,
                      userName:userNameTextField.text!,
                      uid:userid]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...