firebase - Firestore 安全规则未按预期运行
问题描述
我正在尝试执行以下写入-
guard let userid = Auth.auth().currentUser?.uid else {fatalError()}
let firstName = "firstName"
let lastName = "lastName"
let userName = "userName"
let uid = userid
let userInfo = [firstName:firstNameTextField.text!,
lastName:lastNameTextField.text!,
userName:userNameTextField.text!,
uid:userid]
Firestore.firestore().collection("users").document(userid).setData(userInfo) { (error) in
if error != nil {
print(error?.localizedDescription)
} else {
self.performSegue(withIdentifier: "goToFeed", sender: self)
}
}
这些是我的安全规则 -
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read;
}
match /users/{userid} {
allow read: if request.auth.uid != null;
allow create: if request.resource.data.uid == request.auth.uid;
}
}
}
当通过 Xcode 模拟器执行此写入时,该写入被拒绝,并出现错误 - “缺少权限或权限不足”。
但是,当我尝试在 Firestore 规则模拟器上构建相同的文档时,它是被允许的。
此外,我还尝试将该规则修改为此
match /users/{userid} {
allow create: if request.resource.data.uid == request.auth.uid &&
userid == request.auth.uid
}
在上述情况下,Xcode 模拟器和 Firestore 模拟器都拒绝了它。
我究竟做错了什么?
一些澄清 -
当修改规则以使其成为开放数据库时,写入会完美发生。
文档结构如下所示 -
let userInfo = [firstName:firstNameTextField.text!,
lastName:lastNameTextField.text!,
userName:userNameTextField.text!,
uid:userid]
解决方案
推荐阅读
- c++ - 在链接可执行文件之前查找静态库未解析的依赖项
- ms-access - 访问列表框中的显示图像
- angular - 单选按钮组绑定未按预期工作
- php - 如何在 Laravel 集合合并中保留嵌套数组
- angular - 如何防止 ng-bootstrap 模式在输入键上打开?
- django - Django外键插入数据
- db2 - Windows 10 - DB2 / ODBC / .NET 连接到 AS400 / V4R3M0
- php - 将 Laravel 与 database.net 集成 - 行中可见的 html 标签
- excel - 使用 EPPLUS 中的宏从下拉列表中选择多个值
- javascript - Vuejs:如何根据条件给出模态大小