Firebase не может выдвинуть данные, учитывая набор правил - PullRequest
0 голосов
/ 06 июля 2018

Я пытаюсь создать защищенную паролем комнату чата и нашел этот SO ответ пользователю в качестве примера:

Firebase: подход к хранению паролей комнаты

Проблема в том, что, учитывая набор правил в ответе, я не могу понять, как отправить новые данные. Мои правила выглядят так:

{
    "rules": {
        "myApp":{
            "chatRooms" : {
                "$roomID" :  {
                    "password": {
                        ".read": "false",
                        ".write": "root.child('myApp/chatRooms/' + $roomID + 'chatInfo').child('admin').val() == auth.uid"

                    },
                    "chatInfo" : {
                        ".read":true,
                        ".write": "data.child('admin').val() === auth.uid"
                    },
                    "members" : {
                        "$user_id" : {
                            ".validate": "$user_id == auth.uid && newData.val() == root.child('feeds/chatRooms/' + $roomID + '/password').val()"
                        }
                     },
                     "messages" : {
                         ".read" : "root.child('feeds/chatRooms/' + $roomID + '/members/' + auth.uid).exists()"
                     }
                }
            }
        }
    }
}

Так что теперь мне нужно выдвинуть новый chatRoom. Но если я назову это:

var obj = {
    password: "test", 
    chatInfo : {admin: this.state.currentUser.uid, chatName: "foobar"}
};
firebase.database().ref(`myApp/chatRooms`).push(obj);

Сбой, потому что у меня нет правил записи для отправки в chatRooms / $ uid. Если я сделаю это.

Как правильно выдвигать новые данные с помощью таких правил?

1 Ответ

0 голосов
/ 06 июля 2018

Для того, чтобы это работало, вы должны написать путь (и), где ваши правила.

Для этого вам придется разделить ваш push() на две части: генерация ключа и фактическая запись данных:

// Generate the key (this happens client side)
var key = firebase.database().ref(`myApp/chatRooms`).push().key;

// Use the key to write your data

firebase.database().ref(`myApp/chatRooms`).child(key).child('chatInfo').set({admin: this.state.currentUser.uid, chatName: "foobar"});
firebase.database().ref(`myApp/chatRooms`).child(key).child('password').set("test");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...