Firebase 安全规则:检查空身份验证

Firebase 安全规则:检查空身份验证,firebase,firebase-security,firebase-realtime-database,Firebase,Firebase Security,Firebase Realtime Database,对于每个安全规则,是否需要始终检查身份验证!==无效的对每个孩子都这样做似乎是多余的 我检查了Firebase自己的Firechat安全规则,但执行情况根本不一致。有些规则使用auth.uid,但不检查null auth 如果auth为null,并且在规则中使用auth.uid,会发生什么情况 关于检查身份验证,推荐的做法是什么!==空?您需要检查auth!==如果要将数据限制为任何经过身份验证的用户,则为null 如果要将数据限制为当前经过身份验证的用户,则需要检查auth.uid==$uid

对于每个安全规则,是否需要始终检查身份验证!==无效的对每个孩子都这样做似乎是多余的

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

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


关于检查身份验证,推荐的做法是什么!==空?

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

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

所以本质上,
auth!=null
将数据限制为任何经过身份验证的用户,并且
auth.uid!=null
仅限于当前经过身份验证的单个用户

现在来了解一些课外信息

使用简化常用规则。

安全规则是灵活的,但它们在复制通用规则方面没有太多的便利。为此,您可以使用

允许您创建类型并将其分配给Firebase数据库中的路径。这些类型充当模式。您还可以创建抽象通用规则的函数

我。它讲述了您需要了解的内容,以便通过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()
函数。这将使前进中的变化更容易处理