firebase - 安全 API 身份验证和 $ 变量不相等

标签 firebase

我为我的应用程序尝试了以下安全规则,但遇到了问题。我的 firebase 中有一个用户,唯一 id 是 2。

{
  "rules": {
    "users": {
      "$user": {
        ".read": "$user == auth.id",
        ".write": "$user == auth.id"
      }
    }
  }
}

我已经检查过,当我执行 ".write": "$user == 2" 时,我将无法在 firebase 上写入,但是当我执行 "时.write": "$user == '2'",我将能够在 firebase 上写入。

另一方面,当我执行 ".write": "auth.id == 2" 时,我将能够在 firebase 上写入。

似乎 $user 被视为字符串,而 auth.id 被视为数字。我已经检查了文档 https://www.firebase.com/docs/security/但事实证明这对此事没有帮助。

在绝望的尝试中,我尝试了 ".write": "$user == auth.id.toString()" 这当然给了我这个错误:“6:29:Type error :对不是函数的目标进行函数调用。”

有人可以就这件事给我一些建议吗?

我能想到的唯一解决方法是将“userId”作为 $user 的子项包含在内,它将被读取为数字值而不是字符串。

最佳答案

有两个不明显的细节可能会让您绊倒。

安全规则始终使用 ===

进行评估

您的==会被安全规则自动转换为===;要了解更多信息,请查看文档的“rules expressions”部分。

记录 ID 转换为字符串

您插入的用户 ID (2) 正在转换为字符串(我找不到相关文档,但请记住阅读它)。换句话说,记录 ID 是 "2" 而不是 2,因此您在身份验证数据中的值需要与其匹配。

希望这有帮助:)

关于firebase - 安全 API 身份验证和 $ 变量不相等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14019873/

相关文章:

javascript - 关于 db.collection ('cafes' ).orderBy ('city' ).onSnapshot() 的问题

ios - 在新的 Firebase 中,如何在 xcode 中使用多个配置文件?

ios - 接收器 :null error when trying to save form using globalKey

android - 如何使用 Firebase ML Kit 在图像中查找标记?

javascript - forEach 中的内部 Firestore promise 在外部 promise 之后执行

android - Xamarin.Forms 和 FCM 实现不起作用

javascript - IF 函数运行,而不是 ELSE

android - FCM - 发送到主题和 "Not Registered"错误

firebase - Cloud Firestore 是否有审计跟踪?

android - 使用 "One account per email address"时出现 FirebaseAuthInvalidCredentialsException