【发布时间】:2021-03-25 07:55:24
【问题描述】:
我遇到了一个问题,即 Firestore 安全规则无法根据电话号码过滤掉用户。该规则设置得很完美,它在模拟器上运行良好,但当我在真实设备上测试时却不行。
我有一组管理员,其中文档 ID 是电话号码。我的安全规则检查用户的电话号码是否存在于集合中,如果存在则返回 true。我已经按照here的答案设置如下-
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
function isAdmin() {
return exists(path("/databases/" + database + "/documents/admins/" + request.auth.token.phone_number));
}
match /tasks/{task=**} {
allow read: if request.auth.uid != null;
allow create: if isAdmin();
allow delete: if isAdmin();
allow update: if request.auth.uid != null;
}
}
}
上述 sn-p 中的创建和删除规则在我在模拟器上尝试时获得批准,但在我在真实设备上测试时失败。我还必须提到,如果我将过滤器从电话号码更改为 uid,并将集合中的文档 id 更改为 uid,则以这种方式在真实设备上运行良好-
return exists(path("/databases/" + database + "/documents/admins/" + request.auth.uid));
感觉无法从auth读取token的值。我正在使用 flutter 包进行 firebase auth 和 firestore 发送请求
【问题讨论】:
-
你能解决这个问题吗?
-
嘿,我已经发布了我的问题的答案。如果这对您也有帮助,请告诉我。
标签: firebase flutter google-cloud-firestore firebase-authentication firebase-security