Firebase - 如何限制经过身份验证的用户对某些路径的访问权限?

时间:2018-03-12 22:30:32

标签: javascript firebase-realtime-database firebase-authentication firebase-security-rules

简单问题:

如何限制路径,例如......

/orders/<userid>

/cart/<userid>

/transactions/<userid>/txid

...仅限userid匹配路径中的用户的用户?

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

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

{
  "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使用?

1 个答案:

答案 0 :(得分:1)

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

{
  "rules": {
    "orders": {
      "$uid": {
        ".read": "auth.uid == $uid",
        ".write": "auth.uid == $uid"
      }
    }
  }
}

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

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

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

阅读documentation并使用Firebase信息中心规则部分中的模拟器。