1

Je suis nouveau sur firebase. Je veux lire/écrire des données avec Firebase dans mon application mais quand j'essaye de faire ainsi j'obtiens cette erreur DatabaseError: Permission denied.DatabaseError: Permission denied firebase

fichier Règles

sur firebase

{ 

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

fichier code

 Firebase authFirebaseRef = new Firebase(ApiConstants.FIREBASE_MY_URL); 
     authFirebaseRef.authWithCustomToken(AppConstants.FBT, authResultHandler); 

Firebase.AuthResultHandler authResultHandler = new Firebase.AuthResultHandler() { 
    @Override 
    public void onAuthenticated(AuthData authData) { 
     Log.v("onAuthenticated", authData.getUid()); 
     addEvents(); 
    } 

    @Override 
    public void onAuthenticationError(FirebaseError firebaseError) { 
     Log.v("onAuthenticationError= ", "FirebaseError= " + firebaseError.toString()); 
    } 
}; 

private void addEvents() { 

    mFirebaseDatabase = mFirebaseInstance.getReference("sos").child("emergencyservices"); 
    mFirebaseDatabase.addValueEventListener(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      emergencyServicesList.clear(); 
      for (DataSnapshot dataSnapshotChild : dataSnapshot.getChildren()) { 
       Log.v("onDataChange", ":" + dataSnapshotChild.child("emergencyServicesName").getValue()); 
       EmergencyServiceModel emergencyServiceModel = new EmergencyServiceModel(); 
       emergencyServiceModel.setEmergencyServiceId(dataSnapshotChild.child("emergencyServicesId").getValue().toString()); 
       emergencyServiceModel.setEmergencyServiceName(dataSnapshotChild.child("emergencyServicesName").getValue().toString()); 
       emergencyServicesList.add(emergencyServiceModel); 
      } 
      loadDataToRecyclerView(); 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 
      Log.v("DatabaseError", databaseError.getMessage()); 
     } 
    }); 
} 

Plus tôt j'ai ajouté quelques enregistrements dans sos/emergencyservices en gardant .true à read/write. Mais maintenant je dois le changer avec l'authentification.

+0

vérifier ce lien https://stackoverflow.com/questions/37424544/firebase-database-permission-denied-with-read-write-permissions-set-to-true –

+0

Avez-vous activé la connexion depuis la console? –

+0

@akshay_shahane Oui je l'ai déjà fait – VVB

Répondre

1

Je pense que vous utilisez différents objets pour firebase auth et une autre pour la requête.
Essayez cette

authFirebaseRef.getRoot().child("sos/emergencyservices"‌​).addValueEventListe‌​ner(new ValueEventListener() { ... }; 

au lieu de

mFirebaseDatabase = mFirebaseInstance.getReference("sos").child("emergencyservic‌​es"); 
mFirebaseDatabase.addValueEventListener(new ValueEventListener() { ... }; 

En outre, vous utilisez l'ancienne version de l'API firebase. Je vous réfère à ce link. Le document vous guide à travers la mise à niveau de votre application Firebase.com existante vers la nouvelle console et les API de Firebase.

+0

Cela fonctionne peu de choses d'édition dans votre réponse – VVB

+0

Passez en revue les documents. La mise à niveau vers une nouvelle base d'incendie rendra votre travail plus facile, efficace et mis à jour techniquement. Et, vous trouverez également une tonne de ressources. – Journey

+0

Ok, bien sûr. Merci une fois de plus – VVB

0

Vous devez vous assurer que l'utilisateur est connecté avant d'attacher l'écouteur. Puisque vous êtes déjà l'écoute de l'état d'authentification, il est une question de déplacer le code qui se fixe l'auditeur dans le rappel onAuthenticated:

Firebase.AuthResultHandler authResultHandler = new Firebase.AuthResultHandler() { 
    @Override 
    public void onAuthenticated(AuthData authData) { 
     Log.v("onAuthenticated", authData.getUid()); 
     addEvents(); 

     mFirebaseDatabase = mFirebaseInstance.getReference("sos").child("emergencyservices"); 
     mFirebaseDatabase.addValueEventListener(new ValueEventListener() { 
      @Override 
      public void onDataChange(DataSnapshot dataSnapshot) { 
       emergencyServicesList.clear(); 
       for (DataSnapshot dataSnapshotChild : dataSnapshot.getChildren()) { 
        Log.v("onDataChange", ":" + dataSnapshotChild.child("emergencyServicesName").getValue()); 
        EmergencyServiceModel emergencyServiceModel = new EmergencyServiceModel(); 
        emergencyServiceModel.setEmergencyServiceId(dataSnapshotChild.child("emergencyServicesId").getValue().toString()); 
        emergencyServiceModel.setEmergencyServiceName(dataSnapshotChild.child("emergencyServicesName").getValue().toString()); 
        emergencyServicesList.add(emergencyServiceModel); 
       } 
       loadDataToRecyclerView(); 
      } 

      @Override 
      public void onCancelled(DatabaseError databaseError) { 
       Log.v("DatabaseError", databaseError.getMessage()); 
      } 
     }); 
    } 

    @Override 
    public void onAuthenticationError(FirebaseError firebaseError) { 
     Log.v("onAuthenticationError= ", "FirebaseError= " + firebaseError.toString()); 
    } 
}; 
+0

Merci pour votre réponse. Oui, je fais la même chose. S'il vous plaît voir le code édité – VVB

+0

Hmm .... pas sûr de ce qui se passe alors. Le message d'erreur devrait vous dire à quel endroit il échoue. –

+0

@VVB Cela a-t-il fonctionné? – Journey

0

Eh bien, avez-vous activer la méthode de connexion nécessaire dans la console firebase ?

firebase_signin_method

+0

Oui je l'ai déjà fait – VVB

+0

Avez-vous réussi à enregistrer les utilisateurs? – Journey

+0

Oui, je l'ai fait en utilisant l'intégration JBT firebase personnalisée – VVB