Firebase Firestore安全规则:无法将用户发送的数据与Firestore上的数据进行比较

时间:2020-04-06 17:09:58

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

首先在我的Firestore中,创建了一个名为“ usr”的集合,其中包含用户的不同信息(下面是一个示例):

{ 
 firstName: "John"
 lastName: "Doe"
 middleName: "Dimple"
 uniqueCode: "HsdaVBw"
}

,当使用以下代码登录时,我将使用此文档来验证用户身份:

Query query = data.collection("usr").
                            whereEqualTo("lastName", lastName).
                            whereEqualTo("firstName", firstName).
                            whereEqualTo("uniqueCode", uniqueCode);

verifyUser(query);

private void verifyUser(Query query) {

    query.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
        @Override
        public void onComplete(@NonNull Task<QuerySnapshot> task) {
                if(task.isSuccessful()) {
                    login();
                }else{
                    Log.d("LoginPage ", "Login failed!");
                }
        }
    });
}

,在意识到我为Firestore选择了测试模式后,我创建了一条规则,该规则也将以某种方式验证用户的请求数据。

 match /usr/{user} {
    allow read: if request.resource.data.lastName == resource.data.lastName && 
    request.resource.data.firstName == resource.data.firstName &&
    request.resource.data.uniqueCode == resource.data.uniqueCode;
}

所以我尝试登录后出现此错误:

W/Firestore: (21.4.1) [Firestore]: Listen for Query(target=Query(users where lastName == # com.google.firestore.v1.Value@a23137e8
integer_value: 0
string_value: "Doe" and firstName == # com.google.firestore.v1.Value@faaab68a
integer_value: 0
string_value: "John" and uniqueCode == # com.google.firestore.v1.Value@cb5c8a4b
integer_value: 0
string_value: "HsdaVBw" order by __name__);limitType=LIMIT_TO_FIRST) failed: Status{code=PERMISSION_DENIED, description=Missing or insufficient permissions., cause=null}

我的规则有问题吗?我的代码?

(我基于此网站的规则:https://firebase.google.com/docs/firestore/security/rules-query

0 个答案:

没有答案