FireBase чат приложение setValue ошибка с публичной базой данных? - PullRequest
0 голосов
/ 01 сентября 2018

У меня есть приложение чата, использующее Firebase, которое продолжает иметь

setValue в x не удалось: ошибка DatabaseEr: разрешение отклонено

ошибка каждый раз, когда я набираю сообщение.

Я уже сделал свою базу данных общедоступной:

service cloud.firestore {
  match /databases/{database}/documents {
    match /{allPaths=**} {
      allow read, write: if request.auth.uid != null;
    }
  }
}

Это что-то из моего чата?

private void displayChat() {

    ListView listOfMessage = findViewById(R.id.list_of_message);

    Query query = FirebaseDatabase.getInstance().getReference();
    FirebaseListOptions<Chat> options = new FirebaseListOptions.Builder<Chat>()
            .setLayout(R.layout.list_item)
            .setQuery(query, Chat.class)
            .build();

    adapter = new FirebaseListAdapter<Chat>(options) {
        @Override
        protected void populateView(View v, Chat model, int position) {
            //Get reference to the views of list_item.xml
            TextView messageText, messageUser, messageTime;
            messageText = v.findViewById(R.id.message_text);
            messageUser = v.findViewById(R.id.message_user);
            messageTime = v.findViewById(R.id.message_time);

            messageText.setText(model.getMessageText());
            messageUser.setText(model.getMessageUser());
            messageTime.setText(DateFormat.format("dd-MM-yyyy (HH:mm:ss)", model.getMessageTime()));
        }
    };
    listOfMessage.setAdapter(adapter);
}

Ответы [ 2 ]

0 голосов
/ 01 сентября 2018

Ваш код использует базу данных Firebase Realtime, но вы меняете правила безопасности для Cloud Firestore. Хотя обе базы данных являются частью Firebase, они совершенно разные, и правила безопасности на стороне сервера для одной из них не применимы к другой.

Когда вы переходите на панель базы данных в консоли Firebase, вы, скорее всего, попадаете в правила Cloud Firestore :

Cloud Firestore rules in Firebase console

Если вы используете правила Cloud Firestore в консоли Firebase , вы можете перейти к правилам базы данных реального времени, нажав Cloud Firestore BETA вверху и выбрав База данных в реальном времени из списка.

Switching to Realtime Database rules in Firebase console

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

Правила безопасности для базы данных реального времени, которые соответствуют вашим:

{
  "rules": {
    ".read": "auth.uid !== null",
    ".write": "auth.uid !== null"
  }
}

Это предоставит любому аутентифицированному пользователю полный доступ на чтение и запись ко всей базе данных. Прочтите мой ответ на этот вопрос, чтобы узнать больше о соотношении безопасности и риска для таких правил: Электронная почта Firebase, в которой говорится, что в моей базе данных в реальном времени есть небезопасные правила .

0 голосов
/ 01 сентября 2018

изменить это

request.auth.uid != null

до

request.auth.uid == null

или определил правильный механизм аутентификации перед началом диалога, где пользователь определен userID

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