对于每个安全规则,是否有必要始终检查auth!== null?为每个儿童规则做这件事似乎是多余的.
我检查了Firebase自己的Firechat安全规则,执行情况根本不一致.有些规则使用auth.uid但不检查null auth.
如果auth为null并且规则中使用了auth.uid会发生什么?
关于检查auth的推荐做法是什么!== null?
您需要检查auth !== null
是否要将数据限制为任何经过身份验证的用户.
您需要检查auth.uid == $uid
何时将数据限制为当前经过身份验证的用户.您不需要检查auth == null && auth.uid != $uid
因为auth.uid == $uid
如果auth
变量为null 将评估为false .但你仍然可以将两者都包括在内.
因此,实质上auth != null
是将数据限制为任何经过身份验证的用户,并auth.uid != null
限制为当前经过身份验证的单个用户.
现在提供一些额外的课程信息.
使用Bolt编译器简化通用规则.
安全规则是灵活的,但它们对于复制通用规则没有太多便利.为此,您可以使用Bolt编译器.
Bolt编译器允许您创建类型并将它们分配给Firebase数据库中的路径.这些类型充当架构.您还可以创建抽象通用规则的函数.
我写了一篇关于用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()
三次函数.这将使更改前进更容易处理.