エラーが発生しています
gettingdocuments.com.google.firebase.firestore.FirebaseFirestoreException:PERMISSION_DENIED:権限がないか、不十分です。
elseステートメントの次のコード
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
false;をtrue;に変更します
データベース-> ルールに移動します:
その後ルールの下で変更されました
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;
}
}
}
dBが空でないこと、クエリが存在しないコレクションに対するものであることを確認してください
したがって、私の場合、次のDBルールがありました。
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
フィールドがあります。
それから私のコードでは、すべてのストーリー(Flutter)を照会していました。
Firestore.instance
.collection('stories')
.snapshots()
また、別のユーザーを介していくつかのストーリーを既に追加しているため、失敗しました。これを修正するには、クエリに条件を追加する必要があります。
Firestore.instance
.collection('stories')
.where('uid', isEqualTo: user.uid)
.snapshots()
詳細はこちら: https://firebase.google.com/docs/firestore/security/rules-query
さらに、コードからのコレクション参照がfirebaseのコレクション名と一致しない場合、このエラーが発生する可能性があります。
たとえば、firebaseのコレクション名はusers
ですが、db.collection("Users")
またはdb.collection("user")
を使用して参照しています
大文字と小文字も区別されます。
これが誰かを助けることを願っています
上記の回答は、データベースの状態にとって危険です。書き込みではなく読み取り専用でデータベースを使用可能にすることができます。
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read: if true;
allow write: if false;
}
}
}