【问题标题】:Firebase Real-time database rules. Get rules without @uid in url [closed]Firebase 实时数据库规则。获取url中没有@uid的规则[关闭]
【发布时间】:2018-11-05 11:23:07
【问题描述】:

需要为实时数据库设置规则以检查字段user 是否符合auth.uid。你能做到吗?

日常检查

"tasks": {
   "$uid": {
       ".read": "$uid === auth.uid",
       ".write": "$uid === auth.uid"
   }
}

这些规则不起作用,检查auth.uid =! null 相同。

【问题讨论】:

  • 你需要修改你的推送代码来插入任务->UID。目前根据您的图像,它正在插入唯一键,这与 uid firebase.google.com/docs/database/admin/save-data 不同
  • @Grimthorr 的回答解决了您的问题吗?否则你可以显示你的查询不起作用吗?
  • @Curse 是的,谢谢

标签: firebase firebase-realtime-database firebase-security


【解决方案1】:

您似乎希望将数据库中的 user 值与当前用户的 UID 匹配。但是,在您的示例中,您似乎混淆了任务 ID 和用户 ID。

您需要使用安全规则data variable 将您的user 子节点与auth.uid 匹配。为此,您的规则需要如下所示:

"tasks": {
    "$task_id": {
        ".read": "data.child('user').val() == auth.uid",
        ".write": "data.child('user').val() == auth.uid"
    }
}

使用$task_id 将创建一个capture variable 来匹配tasks 下的任何路径段,但在实例中没有使用它的实际值。相反,我们在tasks/$task_id/user 处获取子节点的值,并通过在读写规则中使用data.child('user').val() 将其与auth.uid 进行比较。

关于所有有效规则变量的进一步阅读和一些示例可以在securing your data documentation 中找到。

【讨论】:

  • 链接应该是这样的? site.com/-LPqa516TxYFFw-JJOQi /tasks ?这个网址太长了
  • 反之亦然:example.com/tasks/-LPqa516TxYFFw-JJOQi,但这是另一个问题。
猜你喜欢
  • 2021-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-13
  • 2020-08-08
相关资源
最近更新 更多