对于每个安全规则,是否有必要始终检查auth!== null?为每个儿童规则做这件事似乎是多余的。
我查看了Firebase自己的Firechat安全规则,执行情况根本不一致。有些规则使用auth.uid但不检查null auth。
如果auth为null并且规则中使用了auth.uid,会发生什么?
关于检查auth的推荐做法是什么?== null?
答案 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()
函数三次。这将使更改变得更容易处理。