首先在我的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)