当只有经过身份验证的用户才能阅读文档时,如何检查文档是否以未经身份验证的用户身份存在于集合中

时间:2019-11-04 09:57:06

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

我有一个用户集合,每个文档的ID都是用户的电子邮件。 登录用户时,我想检查用户集合中是否有已经包含此电子邮件作为文档ID的文档(如果该用户确实已注册)。

我使用firebase firestore,并且我有一些安全规则,仅允许经过身份验证的用户读取文档的数据。

我对该收藏的规则如下:

match /collection/{docId} {
      allow read: if request.auth != null;
      ...
    }

登录页面中的代码:

firebase.firestore().collection('collection').doc('docId').get()
        .then(doc => {
            if (doc.exists) {
                firebase.auth().signInWithEmailAndPassword(email, password);
            }
            else {
                this.setState({ error: 'user does not exist' });
            }
        })
        .catch(() => this.setState({ error: 'you don't have permission' }));
    }

运行此检查时,出现错误“您没有权限”,但是当我更改allow read: if true的规则时,它工作正常。 我只需要检查文档是否存在。

1 个答案:

答案 0 :(得分:2)

没有特殊权限来检查文档是否存在。客户端必须能够完全阅读该文档以检查其是否存在,因此安全规则将无法帮助您。

您可以做的是仅使用未经身份验证的用户应能够访问的数据进行单独的收集,然后仅将最少量的数据复制到这些文档中,以使功能正常工作。然后,您的规则可以允许完全访问此其他集合。