安全规则:检查null auth

时间:2015-12-02 01:19:47

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

对于每个安全规则,是否有必要始终检查auth!== null?为每个儿童规则做这件事似乎是多余的。

我查看了Firebase自己的Firechat安全规则,执行情况根本不一致。有些规则使用auth.uid但不检查null auth。

如果auth为null并且规则中使用了auth.uid,会发生什么?

关于检查auth的推荐做法是什么?== null?

1 个答案:

答案 0 :(得分:5)

如果您希望将数据限制为任何经过身份验证的用户,则需要检查auth !== null

如果您希望将数据限制为当前经过身份验证的用户,则需要检查auth.uid == $uid。您不需要检查auth == null && auth.uid != $uid,因为如果auth.uid == $uid变量为空,auth将评估为false。但你仍然可以将两者都包括在内。

基本上,auth != null将数据限制为任何经过身份验证的用户,auth.uid != null限制为当前经过身份验证的用户。

现在提供一些额外的课程信息。

使用Bolt compiler简化通用规则。

安全规则是灵活的,但它们不太容易复制常见规则。为此,您可以使用Bolt compiler

The Bolt compiler可让您创建类型并将其分配到Firebase数据库中的路径。这些类型充当架构。您还可以创建抽象通用规则的函数。

wrote a blog post on securing user data with Bolt。它通过您需要知道的内容来保证用户数据在Bolt中保护类型和功能。

isCurrentUser(uid) = auth != null && auth.uid == uid;
isAuthenticated() = auth != null

path /users/$uid {
  read() = isAuthenticated() // any authenticated user can read 
  write() = isCurrentUser($uid); 
}

在上面的示例中,我们重复使用isCurrentUser()函数三次。这将使更改变得更容易处理。