如果查询知道他的两个字段,则查找文档 ID,firestore 规则
Find document ID if the query know two of his fields, firestore rules
我正在尽力在我的应用程序中设置一项功能,允许知道群组登录名和密码的人加入。
每个组在“组”集合中都有一个文档,每个用户在“用户”集合中都有一个文档。
为了保留 id 和密码信息,我有另一个名为“AuthGroups”的集合,包含与组一样多的文档,有两个字段:“登录名”和“密码”。每个 auth 文档都具有与 Groups 集合中相应文档相同的 ID。
所以,这是我的策略:
当用户验证登录名和密码时,第一个查询将发送到数据库,以在“AuthGroups”集合中查找具有这些凭据的文档。
如果找到文档,其 ID 将用于在“组”集合中执行另一个查询以检索组的数据。
查询可能如下所示:
var ID = await firestore.collection('AuthGroups')
.where('login', isEqualTo: login)
.where('password', isEqualTo: password)
.get()
.then((value) {
return value.docs.first.id;
});
var groupName = await firestore.collection('Groups')
.doc(id)
.get()
.then((value) {
return value.get('name');
});
现在,让我们谈谈如何确保安全的 Firestore 规则...
为了防止恶意的人看到我的“AuthGroup”集合中的所有文档。我告诉自己,我的规则只需要允许包含“登录”和“密码”字段的查询。但我不知道如何正确地做,如果可能的话......
“组”集合中的文档也是如此:用户只有知道其 ID 才能获取文档。
一种解决方案是在我的“AuthGroup”集合中命名我的文档,例如“登录名 + 密码”,并将组的 ID 存储在其中。在我的规则中,只允许这样的列表请求:
service cloud.firestore {
match /databases/{database}/documents {
match /AuthGroup/{organization} {
allow list: if request.auth != null;
}
}
}
I told myself that my rules need to only allow queries containing both "login" and "password" fields. But I don't know how to do it right, and if it's even possible.
这不可能。 .
A solution could be to name my documents in my "AuthGroup" collection like "login + password", and store the group's ID in it. And in my rules, allow only list requests like that
是的,这是一个可能的解决方案。或者您可以散列连接的登录名和密码字符串,这样您就不会在文档 ID 中公开它们或超过该 ID 的最大长度。
我正在尽力在我的应用程序中设置一项功能,允许知道群组登录名和密码的人加入。
每个组在“组”集合中都有一个文档,每个用户在“用户”集合中都有一个文档。
为了保留 id 和密码信息,我有另一个名为“AuthGroups”的集合,包含与组一样多的文档,有两个字段:“登录名”和“密码”。每个 auth 文档都具有与 Groups 集合中相应文档相同的 ID。
所以,这是我的策略: 当用户验证登录名和密码时,第一个查询将发送到数据库,以在“AuthGroups”集合中查找具有这些凭据的文档。 如果找到文档,其 ID 将用于在“组”集合中执行另一个查询以检索组的数据。
查询可能如下所示:
var ID = await firestore.collection('AuthGroups')
.where('login', isEqualTo: login)
.where('password', isEqualTo: password)
.get()
.then((value) {
return value.docs.first.id;
});
var groupName = await firestore.collection('Groups')
.doc(id)
.get()
.then((value) {
return value.get('name');
});
现在,让我们谈谈如何确保安全的 Firestore 规则... 为了防止恶意的人看到我的“AuthGroup”集合中的所有文档。我告诉自己,我的规则只需要允许包含“登录”和“密码”字段的查询。但我不知道如何正确地做,如果可能的话...... “组”集合中的文档也是如此:用户只有知道其 ID 才能获取文档。
一种解决方案是在我的“AuthGroup”集合中命名我的文档,例如“登录名 + 密码”,并将组的 ID 存储在其中。在我的规则中,只允许这样的列表请求:
service cloud.firestore {
match /databases/{database}/documents {
match /AuthGroup/{organization} {
allow list: if request.auth != null;
}
}
}
I told myself that my rules need to only allow queries containing both "login" and "password" fields. But I don't know how to do it right, and if it's even possible.
这不可能。
A solution could be to name my documents in my "AuthGroup" collection like "login + password", and store the group's ID in it. And in my rules, allow only list requests like that
是的,这是一个可能的解决方案。或者您可以散列连接的登录名和密码字符串,这样您就不会在文档 ID 中公开它们或超过该 ID 的最大长度。