Firestore DocumentSnapshot存在安全规则问题

时间:2019-03-05 16:50:45

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

因此,如果{promise}总是因为找不到文档(实际上还不存在)而失败,那有.exists()的意义是什么。

match /conversations/{conversationId} {
    allow read: if request.auth.uid in resource.data.participants
}

这将是查询(简约示例)

store.conversations
    .doc( conversationId )
    .get()
    .then( async snapshot => {
        if ( !snapshot.exists )
            data = await dispatch( startConversation( participant ) )
    }
    .catch( console.err )

如果文档不存在,则该分派将永远不会触发,因为安全规则期望request.auth.uid位于resource.data.participants数组中,有时情况并非如此。

我想解决此问题的唯一方法是更改​​安全规则,以允许在文档不存在时进行读取。但这简直是违反直觉的。

match /conversations/{conversationId} {

    function conversationExists(conversationId) {
        return exists(/databases/$(database)/documents/conversations/$(conversationId))
    }

    allow read: if request.auth.uid in resource.data.participants || !conversationExists(conversationId)

}

我会在.catch()中处理该问题,但是,我不知道这是文档丢失问题还是其他引起问题的原因(超时,网络问题,无论如何)。

在这种情况下,什么是最佳做法的任何线索?

0 个答案:

没有答案