我在使用以下数据库规则从客户端(我的iOS应用)上的数据库读取和写入数据时遇到问题:
// Checks auth uid equals database node uid
// In other words, the User can only access their own data
{
"rules": {
"posts": {
"$uid": {
".read": "$uid === auth.uid",
".write": "$uid === auth.uid"
}
}
}
}
但是,使用以下规则时,我没有读写数据的问题:
{
"rules": {
".read": "auth != null",
".write": "auth != null"
}
}
我的目标是让每个用户只能读取/写入自己的数据。任何建议/帮助将不胜感激。
编辑:
尝试发布时,我使用以下(iOS):
let key = ref?.childByAutoId().key
let post = ["uid": key,
"title": titleField.text,
"description": descField.text]
ref?.child(key!).setValue(post)
当我想检索这些数据条目时,当前我正在尝试通过查看参考点(“任务”)来检索数据条目(在iOS中,我的数据库参考如下):
ref = Database.database().reference().child("task")
ref.observe(.childAdded, with: { (snapshot) in
print(snapshot)
guard let dictionary = snapshot.value as? [String : AnyObject]
else {
return
答案 0 :(得分:0)
您的规则与您的查询不匹配。您的查询正在访问名为“任务”的节点上的文档,但是您的规则正在保护名为“帖子”的节点。您应编辑规则以匹配要保护的查询。
答案 1 :(得分:0)
这里发生了几件事。
首先为Doug answered,您的规则必须匹配您的查询。
第二,在使用childByAutoId()
时,您正在创建一个随机密钥。相反,您应该使用已登录用户的UID。
第三,从数据库中读取数据时,必须确保从放置规则的位置进行读取。当前,如果未定义任何规则,则您正在尝试阅读整个列表。 (当未定义任何规则时,Firebase默认设置为false),而是应阅读列表的子项。
您还可以查看my answer here,以获取更多说明和指向相关文档的链接。