ফায়ার স্টোর: PERMISSION_DENIED: অনুপস্থিত বা অপর্যাপ্ত অনুমতি


117

আমি ত্রুটি পাচ্ছি

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

ব্যবহারকারী কি লগ ইন করেছেন?
সুহাইল এসএইচ

4
আপনি কি ফায়ারবেস কনসোলে সুরক্ষা ট্যাবের অধীনে নিয়মগুলি সেট করেছেন?
সুহাইল এসএইচ

1
আমার ভুল, আমি ক্লাউড ফায়ার স্টোরের জন্য ড্রপ বক্সটি দেখিনি। আমি শুধুমাত্র রিয়েলটাইম ডাটাবেসে চেক করছিলাম।
এস রেখু

ধন্যবাদ @ সুহাইল এসএইচ
এস রেখু

উত্তর:


170

এটি কেবল আমার জন্য কাজ করে।

ডাটাবেস -> বিধি -> যান

allow read, write: if মিথ্যা পরিবর্তন ; থেকে সত্য;

দ্রষ্টব্য: এটি সম্পূর্ণভাবে ডাটাবেসের জন্য সুরক্ষা বন্ধ করে দেয়!

প্রমাণীকরণ ছাড়াই এটিকে বিশ্ব লিখনযোগ্য করে তোলেন !!! এটি কোনও উত্পাদন পরিবেশের জন্য সুপারিশ করার কোনও সমাধান নয়। এটি কেবল পরীক্ষার উদ্দেশ্যে ব্যবহার করুন।


42
নোট করুন এটি প্রত্যেককে কোনও অনুমোদন ছাড়াই আপনার ডাটাবেসটি পড়তে, লিখতে দেয়।
সাঁই গোপী মি

102
এটি একটি ভয়াবহ সমাধান, এটি আক্ষরিকভাবে কেবল সুরক্ষা অক্ষম করে। পরিবর্তে এটি পড়ুন: firebase.google.com/docs/firestore/security/get-st সূচিত
ডানকান লুক

2
@ojonugwaochalifu কারণ এটি সবার জন্য কাজ করছে
লুভনিশ মঙ্গা

11
@ ডানকানলুকের মতই এটি একটি ভয়ানক সমাধান। আমি এটিকে কোনও সমাধানও বলব না
ওজনুগা জুড ওচালিফু

6
সত্যিই দ্রুত শুরু করার সেরা সমাধান। সুরক্ষার উদ্বেগগুলি পরে ঠিক করা যেতে পারে।
ভাইচেস্লাভ ডব্রোমাইস্লোভ

78

ডাটাবেস -> বিধিগুলিতে যান :

তারপরে নিয়মের নীচে পরিবর্তন করা হয়েছে

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

নিচে

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

8
এটি একটি খারাপ ধারণা, এটি যে কোনও প্রমাণীকৃত ব্যবহারকারীর দ্বারা সমস্ত দস্তাবেজকে লিখিতযোগ্য করে তোলে, এমনকী এমন সামগ্রী যা অন্যান্য ব্যবহারকারীর অন্তর্ভুক্ত, এমন সামগ্রী যা কেবল অ্যাডমিন দ্বারা লিখিত হতে হবে বা কখনই লিখনযোগ্য নয়। কোডটির প্রথম টুকরোটি রাখুন কারণ এটি প্রয়োগ না করা সুরক্ষা বিধিগুলির বিরুদ্ধে রক্ষী।
Noxxys

1
মনে রাখবেন যে আপনি যদি লোকেদের সাইন আপ করতে দেন (উদাহরণস্বরূপ গুগল এসএসও দিয়ে) তাদের স্বয়ংক্রিয়ভাবে আপনার সমস্ত ডেটাতে অ্যাক্সেস থাকবে।
ফরেস্টলাইম্যান

2
আমি আমার অনুমোদনপ্রাপ্ত ব্যবহারকারীদের (একটি অল্প সংখ্যক) সমস্ত দস্তাবেজ অ্যাক্সেস করার অনুমতি দিতে চাই, সুতরাং এই রেসিপিটি আমার ক্ষেত্রে উপযুক্ত।
এএফডি

1
এটি গ্রহণযোগ্য উত্তর হওয়া উচিত।
ইশান

19

সুতরাং আমার ক্ষেত্রে আমার নিম্নলিখিত ডিবি নিয়ম ছিল:

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

আপনি দেখতে পাচ্ছেন যে মালিককে চিহ্নিত করার uidজন্য storyনথিতে একটি ক্ষেত্র রয়েছে ।

তারপরে আমার কোডে আমি সমস্ত গল্প জিজ্ঞাসা করছিলাম (বিড়বিড় করে):

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

এবং এটি ব্যর্থ হয়েছে কারণ আমি ইতিমধ্যে বিভিন্ন ব্যবহারকারীর মাধ্যমে কিছু গল্প যুক্ত করেছি। এটি ঠিক করার জন্য আপনার ক্যোয়ারিতে শর্ত যুক্ত করতে হবে:

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

এখানে আরও বিশদ: https://firebase.google.com/docs/firestore/security/rules-query

সম্পাদনা: লিঙ্ক থেকে

বিধিগুলি ফিল্টার হয় না নথিগুলি পুনরুদ্ধার করার জন্য প্রশ্নগুলি লেখার সময়, মনে রাখবেন যে সুরক্ষা বিধিগুলি ফিল্টার নয় — প্রশ্নগুলি সব কিছুই বা কিছুই নয়। আপনার সময় এবং সংস্থানগুলি বাঁচাতে ক্লাউড ফায়ারস্টোর আপনার সমস্ত নথির জন্য প্রকৃত ক্ষেত্রের মানগুলির পরিবর্তে এর সম্ভাব্য ফলাফল সেটের বিপরীতে একটি কোয়েরি মূল্যায়ন করে। যদি কোনও প্রশ্নটি ক্লায়েন্টকে পড়ার অনুমতি নেই এমন নথিগুলি সম্ভাব্যভাবে ফিরিয়ে দিতে পারে তবে পুরো অনুরোধটি ব্যর্থ হয়।


ব্যবহারকারী অবজেক্টটি কী?
ফানি ithত্বভিজ

এটি সেরা উত্তর
এলিয়া ওয়েইস

12

উপরের ভোট দেওয়া উত্তরগুলি আপনার ডাটাবেসের স্বাস্থ্যের জন্য বিপজ্জনক। আপনি এখনও আপনার ডাটাবেস কেবল পাঠের জন্য উপলব্ধ করতে পারেন এবং লেখার জন্য নয়:

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

1
অনুমতিগুলি সক্ষম করার সঠিক উপায় কী, তবে সবার জন্য নয়?
nyxee

8

আপনি যদি জাভা সুইং অ্যাপ্লিকেশন চেষ্টা করেন।

  1. গো টু Firebase Console> Project Overview>Project Settings

  2. তারপরে সার্ভিস অ্যাকাউন্টস ট্যাবে যান এবং তারপরে জেনারেট নিউ প্রাইভেট কীতে ক্লিক করুন।

  3. আপনি একটি .json ফাইল পাবেন, এটি একটি পরিচিত পথে রাখুন

  4. তারপরে মাই কম্পিউটার প্রোপার্টি, অ্যাডভান্সড সিস্টেম সেটিংস, এনভায়রনমেন্ট ভেরিয়েবলগুলিতে যান।

  5. GOOGLE_APPLICATION_CREDENTIALSআপনার পাথের সাথে জাসন ফাইলে নতুন পাথের ভেরিয়েবল মান তৈরি করুন।


এই আমার সমস্যা খুব ছিল, সেখানে এই জন্য তথ্য আছে ডক্স
ত্রিস টিমব

5

এনপিএম আমি - সেভ ফায়ারবেস @ কৌনিক / আগুন

অ্যাপ্লিকেশন.মডিউলে আপনি আমদানি করেছেন তা নিশ্চিত করুন

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

3

নিশ্চিত করুন যে আপনার ডিবি খালি নেই বা আপনার জিজ্ঞাসাটি সংগ্রহের জন্য নয় যার অস্তিত্ব নেই


8
এই ব্যতিক্রমটির খালি সংগ্রহ বা ডিবি-র কোনও সম্পর্ক নেই, এটি একটি অনুমোদিত সমস্যা
ওজনুগা জুড ওচালিফু

এই ব্যতিক্রমটির খালি ডিবি ইত্যাদির সাথে কোনও সম্পর্ক নেই সুরক্ষা বিধি এবং আথ নিয়ে সমস্যা।
রেহান আলী

এই দৃশ্যে আমার এবং কমপক্ষে আরও 3 জনের ব্যতিক্রম রয়েছে। যদি এটি আপনাকে সহায়তা না করে তবে পরবর্তী সমাধানে যান
Itzhar

2

অতিরিক্তভাবে, যদি আপনার কোড থেকে সংগ্রহ রেফারেন্স ফায়ারবেসে সংগ্রহের নামের সাথে মেলে না তবে আপনি এই ত্রুটিটি পেতে পারেন।

উদাহরণস্বরূপ ফায়ারবেসে সংগ্রহের নাম users, তবে আপনার সাথে এটি উল্লেখ করা db.collection("Users")বাdb.collection("user")

এটি পাশাপাশি কেস সংবেদনশীল।

আশা করি এটি কাউকে সাহায্য করবে


সংগ্রহটি স্পষ্টভাবে তৈরি করা হয়নি? আপনার উদাহরণে "ব্যবহারকারী" এবং "ব্যবহারকারীর" সংগ্রহটি কখন তৈরি হবে এবং কখন এটি উল্লেখ করা হবে।
bdev TJ

তথ্য এখানে পাওয়া যাবে। codelabs.developers.google.com/codelabs/firestore-android/#3
bdev TJ

@ ডেভটিজে আপনি ঠিক আছেন যখন এটি কোনও অনুরোধ addবা setঅনুরোধ হয় তবে প্রশ্ন থেকে এটি একটি getঅনুরোধ। আমি এর আগেও অভিজ্ঞতা অর্জন করেছি
Anga

2

যদি কেউ এখানে কোনও পরিষেবা-অ্যাকাউন্ট দিয়ে ফায়ার স্টোরে অ্যাক্সেস করার চেষ্টা করছে তবে:

আমি জিসিপির আইএএম সেটিংসে ভূমিকা Service Account Userছাড়াও সার্ভিস-অ্যাকাউন্টকে ভূমিকাটি প্রদান করে এই সমস্যাটি সমাধান করেছি Cloud Datastore User


2

এই সময়ে, জুন 2020, ডিফল্টরূপে ফায়ারবেস সময় দ্বারা সংজ্ঞায়িত করা হয়। আপনার প্রয়োজন মেটাতে সময় নির্ধারণ করুন।

allow read, write: if request.time < timestamp.date(2020, 7, 10);

দয়া করে নোট করুন: আপনার ডিবি এখনও কারও জন্য উন্মুক্ত। আমি পরামর্শ দিচ্ছি, দয়া করে ডকুমেন্টেশনটি পড়ুন এবং আপনার পক্ষে উপযোগী ডিবি কনফিগার করুন।



1

সমস্যাটি হ'ল আপনি ব্যবহারকারীর অনুমোদনের আগে রিয়েলটাইম ডাটাবেস বা ফায়ার স্টোরে ডেটা পড়ার বা লেখার চেষ্টা করেছিলেন। দয়া করে আপনার কোডের সুযোগটি পরীক্ষা করার চেষ্টা করুন। আশা করি এটি সাহায্য করেছে!



1

আমার জন্য এটি তারিখটি নিয়ে সমস্যা ছিল। এটি আপডেট হয়েছে এবং বিষয়টি সমাধান করা হয়েছে।

পড়ার / লেখার অনুমতি দিন:

 if request.time < timestamp.date(2020, 5, 21);

সম্পাদনা করুন: আপনি যদি এখনও বিভ্রান্ত হন এবং সমস্যাটি কী তা বুঝতে ব্যর্থ হন তবে আপনার ফায়ারবেস কনসোলের নিয়ম বিভাগটি একবার দেখুন।


1

সময় সীমা শেষ হতে পারে

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {

    // This rule allows anyone on the internet to view, edit, and delete
    // all data in your Firestore database. It is useful for getting
    // started, but it is configured to expire after 30 days because it
    // leaves your app open to attackers. At that time, all client
    // requests to your Firestore database will be denied.
    //
    // Make sure to write security rules for your app before that time, or else
    // your app will lose access to your Firestore database
    match /{document=**} {
      allow read, write: if request.time < timestamp.date(2020,7, 1);
    }
  }
}

এই লাইনে আজকাল তারিখের পরিবর্তন আছে :

 allow read, write: if request.time < timestamp.date(2020,7, 1);


-1

আপনার বিধিগুলি এই ক্ষেত্রে এর মতো হওয়া উচিত তবে বার্তাটি বলে যে এটি প্রস্তাবিত উপায় নয়, তবে আপনি যদি এটি করেন তবে কোনও অনুমতি ত্রুটি সহ সন্নিবেশগুলি করতে পারেন

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write;
    }
  }
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.