Правила безопасности Firebase Firestore: Невозможно сравнить данные, отправленные пользователем, с данными в Firestore - PullRequest
0 голосов
/ 06 апреля 2020

Сначала в своем 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!");
                }
        }
    });
}

и после осознания того, что я выбрал режим тестирования для своего пожарного депо, я создал правило, которое также каким-то образом проверяет данные запроса пользователя.

 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)

...