android - firestore: PERMISSION_DENIED: गुम या अपर्याप्त अनुमतियाँ




firebase google-cloud-firestore (6)

चेतावनी: यह सभी को (यहां तक ​​कि अनधिकृत उपयोगकर्ताओं को) आपके सभी डेटाबेस तक पहुंच और पढ़ने देता है। शायद नहीं जो आप चाहते हैं!

डेटाबेस में जाएं -> नियम -> और ऐसा करें

service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write;
    }
  }
}

मुझे एरर मिल रहा है

getdocuments.com.google.firebase.firestore.FirebaseFirestoreException: PERMISSION_DENIED: गुम या अपर्याप्त अनुमतियाँ।

नीचे दिए गए कोड के लिए अन्य विवरण पर

db.collection("users")
        .get()
        .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
            @Override
            public void onComplete(@NonNull Task<QuerySnapshot> task) {
                 if (task.isSuccessful()) {
                     for (DocumentSnapshot document : task.getResult()) {
                         s(document.getId() + " => " + document.getData());
                     }
                 } else {
                     s("Error getting documents."+ task.getException());
                 }
             }
         });

नोट: यह पूरी तरह से डेटाबेस के लिए सुरक्षा को बंद कर देता है, जिससे यह प्रमाणीकरण के बिना दुनिया को योग्य बना देता है !!! यह उत्पादन वातावरण के लिए अनुशंसा करने का समाधान नहीं है। केवल परीक्षण उद्देश्यों के लिए इसका उपयोग करें।

यह बस मेरे लिए काम करता है।

डेटाबेस में जाएं -> नियम ->

परिवर्तन allow read, write: if गलत है; सच करने के लिए ;


उपरोक्त मतदान उत्तर आपके डेटाबेस के स्वास्थ्य के लिए खतरनाक हैं। आप अभी भी अपने डेटाबेस को केवल पढ़ने के लिए उपलब्ध कर सकते हैं और लिखने के लिए नहीं:

  service cloud.firestore {
    match /databases/{database}/documents {
     match /{document=**} {
       allow read: if true;
       allow write: if false;
      }
   }
}

तो मेरे मामले में मेरे पास निम्नलिखित डीबी नियम थे:

service cloud.firestore {
  match /databases/{database}/documents {
    match /stories/{story} {
      function isSignedIn() {
        return request.auth.uid != null;
      }

      allow read, write: if isSignedIn() && request.auth.uid == resource.data.uid
    }
  }
}

जैसा कि आप देख सकते हैं कि मालिक को चिह्नित करने के लिए story दस्तावेज़ पर एक uid फ़ील्ड है।

तब मेरे कोड में मैं सभी कहानियों (स्पंदन) को उद्धृत कर रहा था:

Firestore.instance
          .collection('stories')
          .snapshots()

और यह विफल रहा क्योंकि मैंने पहले ही विभिन्न उपयोगकर्ताओं के माध्यम से कुछ कहानियां जोड़ी हैं। इसे ठीक करने के लिए आपको क्वेरी में शर्त जोड़ना होगा:

Firestore.instance
          .collection('stories')
          .where('uid', isEqualTo: user.uid)
          .snapshots()

अधिक विवरण यहां: https://firebase.google.com/docs/firestore/security/rules-query


सुनिश्चित करें कि आपका DB खाली नहीं है और न ही आपकी क्वेरी संग्रह के लिए है, जो मौजूद नहीं है


npm i --save firebase @ कोणीय / अग्नि

app.module में सुनिश्चित करें कि आपने आयात किया है

import { AngularFireModule } from '@angular/fire';
import { AngularFirestoreModule } from '@angular/fire/firestore';

आयात में

AngularFireModule.initializeApp(environment.firebase),
    AngularFirestoreModule,
    AngularFireAuthModule,

वास्तविक समय में डेटाबेस नियम सुनिश्चित करें कि आपके पास है

{
  /* Visit  rules. */
  "rules": {
    ".read": true,
    ".write": true
  }
}

क्लाउड फायरस्टार नियमों में सुनिश्चित करें कि आपके पास है

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if true;
    }
  }
}