我正在尝试安全创建Firestore文档而不需要用户身份验证,并且已定义以下规则来做到这一点:
allow create: if request.resource.data.deviceid == resource.id;
根据我从Google那里读到的内容,如果待处理的写入中包含一个名为“ DeviceID”的字段,该字段与文档ID匹配,这应该允许我创建该文档,这是我想做的(我确认androidID与文档ID相同)
data.put("DeviceID", androidID);
mDevIDDocRef.set(data)
.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
Log.d(TAG, "DocumentSnapshot successfully written!");
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.w(TAG, "Error writing document", e);
}
});
但是,以上操作失败,并带有权限异常。我在做什么错了?
答案 0 :(得分:2)
在创建规则评估期间,该资源尚不存在,因此您必须读取其将来的值:request.resource.data.whatever
要访问自动生成的文档ID,您需要从文档路径中读取它:
match /myCollection/{docId} {
allow create: if request.resource.data.deviceid == docId;
...
}