android firebase firebase-realtime-database firebase-security-rules

android - ¿Falló el setValue de la aplicación de chat Firebase con una base de datos pública?



firebase-realtime-database firebase-security-rules (2)

Tengo una aplicación de chat utilizando Firebase que sigue teniendo una

setValue en x falló: DatabaseError: permiso denegado

error cada vez que escribo un mensaje.

Ya configuré mi base de datos para que sea pública:

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

¿Es algo dentro de mi referencia de chat?

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); }


Su código está utilizando la base de datos en tiempo real de Firebase, pero está cambiando las reglas de seguridad para Cloud Firestore. Si bien ambas bases de datos forman parte de Firebase, son completamente diferentes y las reglas de seguridad del lado del servidor para una, no se aplican a la otra.

Cuando accedes al panel de la base de datos en la consola de Firebase, lo más probable es que acabes en las reglas de Cloud Firestore :

Si se encuentra en las reglas de Cloud Firestore en la consola de Firebase , puede cambiar a las reglas de la Base de datos en tiempo real haciendo clic en Cloud Firestore BETA en la parte superior, y luego seleccionando la Base de datos en tiempo real de la lista.

También puede ir directamente a las reglas de seguridad para la base de datos en tiempo real, haciendo clic en este enlace .

Las reglas de seguridad para la base de datos en tiempo real que coinciden con las que tiene son:

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

Esto otorgará a cualquier usuario autenticado acceso completo de lectura y escritura a toda la base de datos. Lea mi respuesta a esta pregunta para obtener más información sobre la compensación de seguridad / riesgo para tales reglas: el correo electrónico de Firebase que dice que mi base de datos en tiempo real tiene reglas inseguras .


cambia esto

request.auth.uid != null

a

request.auth.uid == null

o definió un mecanismo de autenticación adecuado antes de iniciar la conversación donde el usuario lo define userID