Firebase 数据库规则 : can't write to database

标签 firebase firebase-realtime-database firebase-security

我尝试设置一些重要的写入权限,但无法解决我的问题。我被告知,如果我向房间添加写入规则,那么我会覆盖我的 room/$roomID/ingame 规则。

我想做的是

由身份验证用户创建房间。 仅由房间的创建者在游戏内设置/更新房间。 (有效)

规则:

{
  "rules": {
    ".read": true,
    "user": {
      ".indexOn": "displayname"
    },
    "room": {
      "$roomID": {
        "ingame":{
            ".write": "data.parent().child('creatorUid').val() == auth.uid"
        }
      }
    }
  }
}

我如何调用创建新房间:

let user = firebase.auth().currentUser
dbRoomRef.push().then((room) => {
    room.set({
        creatorUid: user.uid,
            ingame: false,
        })
    }).catch(function(err) {
        console.log(err.message)
    }
)

错误消息(如预期):

FIREBASE 警告:在/room/-L572bnuRv0_vntko-Bd 设置失败:permission_denied

谢谢。

最佳答案

错误消息表明您正在尝试写入 /room/-L572bnuRv0_vntko-Bd 并且无权在那里写入。这是正确的,因为您的规则仅授予写入 /room/-L572bnuRv0_vntko-Bd/ingame 的权限。

如果在创建房间时已经设置了creatorUid,则不必将其包含在写入语句中,只需执行以下操作即可:

room.child("ingame").set(false);

如果您尝试允许每个人创建新房间(或写入现有房间),只要他们是所有者,则需要将规则设置为更高一级:

"room": {
  "$roomID": {
    ".write": "newData.child('creatorUid').val() == auth.uid"
  }
}

关于Firebase 数据库规则 : can't write to database,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48739232/

相关文章:

firebase - 如何使用 Google Apps 脚本使用 Firebase Auth REST API?

javascript - 云函数未在实时数据库上执行 ref.once

android - FCM HTTP 请求返回 message_id 但在 Android 上没有收到消息

firebase - 使用 npm 安装 firebase 时,gyp 和 node-pre-gyp 失败

android - 我如何将多个数据保存到 firebase 实时数据库中

java - Android 和 Firebase 将 EditText 与实时数据库子值进行比较

firebase - Firebase 实时数据库安全规则中的 auth.uid 和 auth.token.sub 有什么区别

security - Firebase:阻止垃圾邮件发送到我的数据库

Firebase 数据库规则允许按字段读取更深的节点

node.js - TypeError : result[0]. 数据不是函数