web-dev-qa-db-fra.com

Autorisation de base de données Firebase refusée avec des autorisations de lecture / écriture définies sur true

Je ne parviens pas à écrire dans ma base de données Firebase dans mon simple Android. J'ai défini mes règles de base de données sur public):

{
  "rules": {
    ".read": true,
    ".write": true
  }
}

Créé une classe simple Message:

import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;

public class Message {
    FirebaseDatabase database = FirebaseDatabase.getInstance();
    DatabaseReference dbRef = database.getReference();
    public String sender;
    public String message;

    public Message(){}

    public Message(String sender, String message) {
        this.sender = sender;
        this.message = message;
    }
}

Et définissez un bouton pour exécuter la méthode onClick writeNewMessage, ces lignes constituant du code:

int counter = 0;

public void writeNewMessage(View view) {

        counter += 1;
        Message messageToWrite = new Message("John", "Simple message: " + counter);
        String messageId = String.valueOf(counter);

        dbRef.child("users").child(messageId).setValue(messageToWrite);
    }

En cours d'exécution, je reçois le message d'erreur:

W/RepoOperation: setValue at /users/1 failed: DatabaseError: Permission denied

Je sais que cette question semble simple et susceptible d'avoir été répétée, mais je n'ai pas encore trouvé de personne qui pose ce problème sans que son erreur soit impliquée dans l'authentification ou dans un autre composant. La simplicité du problème est ce qui me trouble le plus.

EDIT: J'ai aussi trouvé cette erreur:

Failed to load module descriptor class: Didn't find class "com.google.Android.gms.dynamite.descriptors.com.google.firebase.auth.ModuleDescriptor"
21
Ben

Cela ressemble à un problème avec votre google-services.json.

Assurez-vous que le nom de l'application et l'ID client sont les mêmes que dans la console Firebase.

Si vous avez un doute, téléchargez à nouveau google-services.json à partir de la console de votre projet et ajoutez-le à votre projet.

21
devprashant

Solution complète 1). Tout d'abord, allez dans l'onglet Authentification et sélectionnez SIGN-IN-METHOD activer Anonymous On 2). Deuxièmement, allez à l'onglet Base de données et écrivez la règle { "rules": { ".read": true, ".write": true }} 3). Troisièmement, allez dans l'onglet Stockage et écrivez la règle suivante

service firebase.storage {
 match /b/myapplicationname-f2266.appspot.com/o {
 match /{allPaths=**} {
 allow read, write;
}}}

Note Cette solution est uniquement à des fins de test. La procédure suivante vous permet de donner une autorisation publique de lire et écrire votre base de données.

28
sumit mehra

J'ai changé les règles de Firestore au lieu de DB ... J'espère que ça aide une personne aussi bête que moi.

enter image description here

18
Zogrof

Je ne suis pas tout à fait sûr du problème, mais je viens de supprimer mon projet de Firebase et de le recréer, en supprimant et en installant le nouveau fichier google-services.json, qui a parfaitement fonctionné la deuxième fois.

Heureusement, il s'agit d'une application de test et ma base de données était vide, mais si vous vous trouvez dans cette situation et que des informations précieuses sont stockées dans votre compte, je vous recommande de l'exporter avant d'essayer cette solution.

2
Ben