我是firebase的新手。
我如何完成以下规则?
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if false;
}
}
}
我试图将规则更改为以下,
{
"rules":
{
".read": true,
".write": true,
}
}
但是
错误mismatched input '{' expecting {'function', 'service', 'syntax'}
以下是db结构。
目前,这是我的代码(不断返回Permission-denied):
// [START initialize_database_ref]
mDatabase = FirebaseDatabase.getInstance().reference
// [END initialize_database_ref]
val result = HashMap<String, Any> ()
result.put("timestamp", getCurrentTime())
result.put("user_id", USER_ID)
result.put("x_position", -1)
result.put("y_position", -1)
mDatabase!!.ref.child("raw data").child("Z9QD79lDzP7MpD6feWeJ").setValue(result).addOnFailureListener(object : OnFailureListener {
override fun onFailure(@NonNull e: Exception) {
Log.d("firebase", e.localizedMessage)
}
})
任何帮助将不胜感激!谢谢:))
答案 0 :(得分:23)
答案 1 :(得分:2)
对于遇到此问题的其他人,正确的解决方案是更改<{p>中的false
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if false;
}
}
}
测试时到true
。 在项目上线时不要忘记添加额外的安全性!
答案 2 :(得分:1)
因为您的方法查询Firebase而不是Cloud Firestore 所以你应该使用这个方法:
FirebaseFirestore db = FirebaseFirestore.getInstance();
db.collection("YourCollectionName").get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
for (QueryDocumentSnapshot document : task.getResult()) {
Log.d(TAG, document.getId() + " => " + document.getData());
}
} else {
Log.w(TAG, "Error getting documents.", task.getException());
}
}
});
别忘了这个:
implementation 'com.google.firebase:firebase-firestore:17.0.1'