就我而言,Firestore数据库如下所示,其中每个Android客户端都有一个文档映射到他/她的设备Document_sdfljkhsdio ( specific to Android User 1 )
FireStoreCollection
Document_sdfljkhsdio ( specific to Android User 1 )
Collection_xyz
Document_xyz
Document_kjjkssefd ( specific to Android User 2 )
Collection_xyz
Document_xyz
Document_sqdfwdfsme ( specific to Android User 3 )
Collection_xyz
Document_xyz
我没有实施Google Auth,而是希望将文档名称Document_sdfljkhsdio
作为请求数据发送,并将其与Firebase控制台中的某些规则相匹配
service cloud.firestore {
match /databases/{database}/documents {
match /document/{document_sent_from_client}/ {
allow read, write: if request.document_sent_from_client == document_sent_from_client;
}
}
}
我不确定是否可以从Android设备发送文档名称,如果是,请建议。
并且还建议如果这是正确的方法,建议你是否有更好的方法?
提前感谢您的帮助。
答案 0 :(得分:1)
听起来完全可行。要从Android客户端传递document_sent_from_client
,只需构建一个DocumentReference
,其路径为/document/document_sent_from_client
。修改自the documentation:
DocumentReference docRef = db.collection("document").document("document_sent_from_client");
docRef.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
@Override
public void onComplete(@NonNull Task<DocumentSnapshot> task) {
if (task.isSuccessful()) {
DocumentSnapshot document = task.getResult();
if (document != null) {
Log.d(TAG, "DocumentSnapshot data: " + task.getResult().getData());
} else {
Log.d(TAG, "No such document");
}
} else {
Log.d(TAG, "get failed with ", task.getException());
}
}
});
但是安全规则在这里没有帮助:如果客户端请求现有文档(即,如果他们知道文档的路径),他们将得到结果。如果他们请求不存在的文档(即,如果他们不知道文档的路径),则任务将失败。
您基本上依赖于document_sent_from_client
中的密钥是合理不可知的。这种&#34;安全隐患&#34;在没有经过身份验证的用户的情况下相当普遍。