【问题标题】:firebase rules, create an user PERMISSION_DENIED: Permission deniedfirebase 规则,创建用户 PERMISSION_DENIED: Permission denied
【发布时间】:2020-05-04 22:35:28
【问题描述】:

我得到 PERMISSION_DENIED: Permission denied 尝试创建用户时:

{
 "rules": {

   ".read": true,
   ".write": "auth != null",

    "users": {
    "$uid": {
        ".read": true,
        ".write": "auth.uid == $uid",
        ".validate": "
            newData.child('user').isString() &&
            newData.child('user').val().length > 3
        "
    }
 }

 }
}

user 是字符串,超过 3 个字母。但我认为这与id有关。

我使用createUserWithEmailAndPassword 创建一个用户并尝试将其插入数据库:

firebase.database().ref('users/' + userID).set({
    username: username,
    email: email
});

userID 是 id createUserWithEmailAndPassword 返回...

有什么想法吗?

【问题讨论】:

  • 问题很可能来自.validate 部分。
  • 你是如何设置数据的?我的意思是你在使用云功能吗?
  • 您在代码中传递了一个属性username,但在您的规则中验证了user。由于user username 规则拒绝写入。
  • 还有".write": "auth != null", 正在处理用户写的...任何想法为什么?

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


【解决方案1】:

您的问题来自.validate 部分:使用您的规则,您需要编写一个节点,如下所示

firebase.database().ref('users/' + userID).set({
    user: username,   // <-- see here we have a user sub-node
    email: email
});

或者你需要改变你的规则如下:

{
 "rules": {

   ".read": true,
   ".write": "auth != null",

    "users": {
    "$uid": {
        ".read": true,
        ".write": "auth.uid == $uid",
        ".validate": "
            newData.child('username').isString() &&
            newData.child('username').val().length > 3
        "
    }
 }

 }
}

【讨论】:

  • 请注意,您可以通过使用 Firebase 控制台中的“Rules Playground”模块轻松发现此类问题。
猜你喜欢
  • 1970-01-01
  • 2020-07-24
  • 2019-11-27
  • 2018-02-07
  • 1970-01-01
  • 2016-02-26
  • 2023-02-06
  • 2017-03-16
  • 1970-01-01
相关资源
最近更新 更多