firebase - 关于 Firebase 实时数据库身份验证规则的问题
问题描述
我在 Firebase 上编写一个微博网站,我对这个网站很陌生。我正在存储用户信息(例如介绍、个人资料图片)并发布用户写的如下结构:
{
"posts" : {
"postid" : {
"category": "xx",
"content": "xx",
"uid":"xx"
}
},
"users" : {
"uid" : {
"intro" : "xx",
"nickname" : "xx",
"profile_picture" : "xx"
}
}
}
我想制定以下规则:
任何登录的用户都可以发帖,但之后只能编辑自己的帖子
对于用户信息,他们将只能发布/编辑自己的信息。
我设置了如下的数据库安全规则。
"users": {
".read": true,
"$uid": {
".write": "auth.uid===$uid"
},
},
"posts": {
".read": true,
".write": "auth!==null",
},
这里有几个问题:
一个。此规则将使任何不良用户能够编辑任何其他不属于他/她自己的帖子。
湾。尝试写入用户节点时,目前没有现有的 UID 子节点,并且用户被拒绝写入权限。
如何更改数据库规则来解决这两个问题?我的偏好是在不重写前端代码或更改数据库结构的情况下这样做......很想在这里寻求一些建议!
解决方案
要只允许用户写自己的帖子(或使用自己的 UID 创建新帖子),您可以uid
在写入操作中检查该字段的值:
"posts": {
".read": true,
".write": "auth !== null && auth.uid === newData.child('uid').val",
},
推荐阅读
- asp.net-mvc - 在操作方法之间传递变量并在视图中显示?
- jquery - Vue nuxt-link 不触发方法
- regex - 将 2 步 Regex 替换为 1 步 Regex 以获得下划线之间的一个大写字母
- android - 如何从 Unity 中卸载小米?
- numbers - AppleScript 和 Numbers 中的公式和值
- android - React Native MQTT.js 不适用于 Android 9+
- batch-file - 通过 cmd 批处理文件释放磁盘空间到 txt
- c - pthread_cond_timedwait() 是如何工作的?
- firebird - Firebird 3 未在计划中使用索引
- ubuntu - 在安装 LLVM 和 gold-plugin 期间遇到致命错误:无法分配内存