创建Firestore文档时出现权限错误

时间:2020-08-31 12:55:18

标签: android firebase google-cloud-firestore firebase-security

我正在尝试安全创建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);
                }
            });

但是,以上操作失败,并带有权限异常。我在做什么错了?

1 个答案:

答案 0 :(得分:2)

在创建规则评估期间,该资源尚不存在,因此您必须读取其将来的值:request.resource.data.whatever
要访问自动生成的文档ID,您需要从文档路径中读取它:

match /myCollection/{docId} {
    allow create: if request.resource.data.deviceid == docId;
    ...
}