Firebase安全规则

Firebase安全规则,firebase,firebase-security,Firebase,Firebase Security,我是Firebase的新手,真的很难遵守安全规则 我正在尝试为匿名用户会话存储数据,这些会话只能由该用户访问,但一旦我收紧安全规则,我的权限就会被拒绝,无法找出原因 我的结构是: /userSessions/$user/user\u id 应用程序推送到用户会话并写入匿名登录返回的用户id 我有以下安全规则: { "rules": { ".read": true, "userSessions": { "$user": { ".write": "ne

我是Firebase的新手,真的很难遵守安全规则

我正在尝试为匿名用户会话存储数据,这些会话只能由该用户访问,但一旦我收紧安全规则,我的权限就会被拒绝,无法找出原因

我的结构是:

/userSessions/$user/user\u id

应用程序推送到用户会话并写入匿名登录返回的用户id

我有以下安全规则:

{
  "rules": {
    ".read": true,
    "userSessions": {
      "$user": {
        ".write": "newData.child('user_id').val() == auth.id",
        "user_id": {
          ".validate": "newData.isString()"
        }
      }
    }
  }
}
我确信我在做一些愚蠢的事情,但也不知道如何使用安全模拟器,所以不知道如何对此进行故障排除

非常感谢您的帮助

编辑- 匿名身份验证后,尝试在userSessions下创建新条目时出现问题

代码:

您提供的set()操作运行良好;没有错误;这里肯定还有另一个问题,您在复制中没有捕捉到(您是否在Forge中启用了匿名身份验证?)。这里有一把小提琴在你的安全规则上运行,一行一行地复制(只是沿着一个子路径移动):

另一方面,您当前的安全规则将不允许使用
userSession.onDisconnect().remove()
op,因为只有当newData()包含用户id值(即,它不能为空)时才能写入记录。构建这些安全规则的更好方法如下:

{
  "rules": {
    ".read": true,
    "userSessions": {
      "$user": {
        ".write": "$user === auth.id", // delete allowed
        "user_id": {
          ".validate": "newData.isString() && newData.val() === $user"
        }
      }
    }
  }
}

当您的权限被拒绝时,您想做什么?在userSessions下创建一个新的$user-我将更新问题hi@JonReeves!当你们在模拟器中尝试这个时,你们会得到什么?此外,user.id似乎是一个数字(我假设您使用的是Twitter或Facebook?它们都返回数字id)。另外,设置了哪些数据?你能记录用户对象并在这里发布吗?你可以提供给我们更多的数据,使故障排除变得轻松和快速。我实际上不能使用模拟器——它只是说哦。出了点问题…我正在使用匿名身份验证,它返回一个ID字符串,我现在设置的只是身份验证返回的数据和一个时间戳(如上面的代码所示),只是为了保持简单。尝试了这些规则,但仍然被拒绝。确实在Forge中启用了匿名身份验证。我不知道我做错了什么。好的一面是,模拟器现在正在工作,但我不确定如何使用它来测试匿名身份验证,因为它没有给我用户id,所以我无法用它来测试写操作?使用您的代码和我的firebase works-一定是哪里出了问题。非常感谢你的帮助
{
  "rules": {
    ".read": true,
    "userSessions": {
      "$user": {
        ".write": "$user === auth.id", // delete allowed
        "user_id": {
          ".validate": "newData.isString() && newData.val() === $user"
        }
      }
    }
  }
}