【问题标题】:Firebase Rules: Only let users edit own profile but create new usersFirebase 规则:只允许用户编辑自己的个人资料但创建新用户
【发布时间】:2018-03-04 07:59:45
【问题描述】:

我花了最后一天尝试在 firebase 规则上做一些事情,但我似乎无法在任何地方找到解决方案。我对这个 Firebase 规则很陌生,所以请耐心等待 :)

我目前有以下规则:

{
  "rules": {
    "users": {
      "$user_id": {
        // grants write access to the owner of this user account
        ".write": "auth != null && $user_id === auth.uid",
        ".read": "auth != null && $user_id === auth.uid"
      }
    }
  }
}

这只允许具有相同 id 的用户读取和写入他们的数据。但是,问题有点复杂。

如果有新用户注册,则数据库中没有该用户的记录。所以我需要在用户内部创建一个新节点。我怎样才能做到这一点?我不知道在哪里放置条件,以免它们相互干扰。

稍微解释一下就好了,我对这种规则很迷茫。或者,如果您推荐更好的方法来解决此问题,请告诉我!

这是我用来创建新用户的代码:

var usersRef = firebase.database().ref('users'); 
usersRef.push({"hlo": "asdsd"}); 

但它给了我PERMISSION_DENIED。

【问题讨论】:

  • “互相干扰”是什么意思?根据您当前的规则,注册新用户应该不成问题。你测试了吗?
  • 它不起作用。因此,如果我试图向用户添加一个新节点,它不会让我这样做。它会说 PERMISSION_DENIED。
  • 请显示您用于添加新节点的代码
  • 这里是代码: var usersRef = firebase.database().ref('users'); usersRef.push({"hlo": "asdsd"});
  • 尝试改用这个:var usersRef = firebase.database().ref('users'); var uid = usersRef.push().key; usersRef.child(uid).set({"hlo": "asdsd"});

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


【解决方案1】:

你的规则很好。问题是您用来编写新用户的代码。您正在创建一个随机密钥,它与当前用户的 uid 不匹配。您应该从 Firebase Auth 获取用户 uid:

var usersRef = firebase.database().ref('users');
var uid = firebase.auth().currentUser.uid;
usersRef.child(uid).set({"hlo": "asdsd"});

【讨论】:

    猜你喜欢
    • 2017-11-10
    • 2015-10-08
    • 1970-01-01
    • 2019-09-24
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多