Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/416.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Firebase-如何限制经过身份验证的用户';谁能进入某些路径?_Javascript_Firebase Realtime Database_Firebase Authentication_Firebase Security - Fatal编程技术网

Javascript Firebase-如何限制经过身份验证的用户';谁能进入某些路径?

Javascript Firebase-如何限制经过身份验证的用户';谁能进入某些路径?,javascript,firebase-realtime-database,firebase-authentication,firebase-security,Javascript,Firebase Realtime Database,Firebase Authentication,Firebase Security,很简单的问题: 如何限制路径,例如 /orders/ /cart/ /transactions//txid …仅适用于其userid与路径中的用户 我已经设置了身份验证,需要在firebase.auth()之后在Vue中订阅其中一些内容。onAuthStateChanged 根据此处的文档,在以下规则示例中,用户令牌必须与密钥完全匹配: { "rules": { "users": { "$user_id": { // grants write access

很简单的问题:

如何限制路径,例如

/orders/

/cart/

/transactions//txid

…仅适用于其
userid
与路径中的用户

我已经设置了身份验证,需要在
firebase.auth()之后在Vue中订阅其中一些内容。onAuthStateChanged

根据此处的文档,在以下规则示例中,用户令牌必须与密钥完全匹配:

{
  "rules": {
    "users": {
      "$user_id": {
        // grants write access to the owner of this user account
        // whose uid must exactly match the key ($user_id)
        ".write": "$user_id === auth.uid"
      }
    }
  }
}

这是否意味着,
/orders/123456/order123478
将受到限制,并且仅对用户可用?123456?

对于实时数据库,请将规则更新为以下内容:

{
  "rules": {
    "orders": {
      "$uid": {
        ".read": "auth.uid == $uid",
        ".write": "auth.uid == $uid"
      }
    }
  }
}
$uid
键表示嵌套在该级别的任何键,并允许您在规则中引用它。
auth
变量由Firebase提供,包含发出请求的经过身份验证的用户的详细信息,因此您可以将请求用户的
uid
与数据库的
uid
键进行比较,并在匹配时授予权限(嵌套的
”。读取“
”。写入“
值)

因此,对于
uid
user1
的用户,他们可以访问以下数据:

{
  "orders": {
    "user1": {
      "order1": read/write,
      "order2": read/write
    },
    "user2": {
      "order1": no access,
      "order2": no access
    },
    "user3": {
      "order1": no access,
      "order2": no access
    },
}

阅读Firebase仪表板规则部分中的模拟器,并对其进行操作。

我理解正确吗?$uid包含从根目录开始的每一个键?@dsp_099答案已更新。您还可以使用Firebase仪表板规则部分中的模拟器验证您的规则。感谢您的快速响应。另一方面,你能想到任何类似于github项目的食谱吗?考虑到这种访问,看看如何组织“模式”会很有帮助mechanic@dsp_099没问题……我最近经历了这个学习过程,没有任何一刀切的方法,所以你只需要进行实验并犯一些错误。Firebase团队提供了一些示例应用程序,您可以查看:。还有一些人发表了关于如何在NoSQL数据库(有时特别是Firebase)中构造数据的文章/视频,比如Chris Esplin:。非常好,谢谢。最后一个问题:(我相信我最终会在视频中找到答案)如果数据的结构与上面一样,取回订单键是否会自动将所有用户拉到它下面,或者我误解了它的工作原理?应该是用户,然后是订单/事务等,以避免为每个请求加载整个数据库吗?