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

Posted

技术标签:

【中文标题】创建 Firestore 文档时出现权限错误【英文标题】:Getting permission error when creating a Firestore document 【发布时间】:2020-12-19 14:21:36 【问题描述】:

我正在尝试在不需要用户身份验证的情况下安全地创建 Firestore 文档,并为此定义了以下规则:

      allow create: if request.resource.data.deviceid == resource.id;

根据我从 Google 读到的内容,如果待处理的写入包含与文档 ID 匹配的名为“DeviceID”的字段,这应该允许创建文档,这就是我认为我正在做的事情(我确认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】:

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

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

【讨论】:

以上是关于创建 Firestore 文档时出现权限错误的主要内容,如果未能解决你的问题,请参考以下文章

检索数据时出现 Vue/Firestore/Firebase 错误

在云功能上使用 Firestore SDK 时出现错误:无法编码类型

添加“cloud_firestore”时出现颤振错误

使用 firestore Firestore 时出现以下错误:错误:FIRESTORE (8.1.2) INTERNAL ASSERTION FAILED: Unexpected state

使用 firestore 时出现以下错误错误:FIRESTORE (8.1.2) INTERNAL ASSERTION FAILED: Unexpected state

使用 Firestore 获取数据时出现颤振错误