为什么要在仅内容所有者访问安全规则中检查 request.auth != null ?

问题描述 投票:0回答:1

在此页面上:仅内容所有者访问有一个仅内容所有者访问安全规则的示例:

service cloud.firestore {
  match /databases/{database}/documents {
    // Allow only authenticated content owners access
    match /some_collection/{userId}/{documents=**} {
      allow read, write: if request.auth != null && request.auth.uid == userId
    }
  }
}

为什么我们要检查

request.auth != null
,因为它与
request.auth.uid == userId
是多余的?

firebase firebase-authentication firebase-security
1个回答
0
投票

从技术上讲,如果访问来自未经身份验证的客户端,

request.auth.uid == userId
将生成错误。该错误是因为
request.auth
将为 null,并且您无法访问 null 对象的属性(就像 JavaScript 一样)。该错误将导致规则立即拒绝访问(因为规则系统永远不会容忍错误)。但是,它仍然被归类为错误,并且立即拒绝可能不是您想要的,因为它会阻止其他规则评估。

对于您所展示的这个简单示例,在实践中这两种方式都没有多大关系。你会得到相同的结果。但对于更复杂的规则,您可能不希望出现错误来短路您编写的规则中其他条件的评估。

是否要写入额外条件完全由您决定。请务必测试您的规则,这样您就可以确保它们按照您期望的方式工作。

© www.soinside.com 2019 - 2024. All rights reserved.