【问题标题】:Firebase rules anonymous and authentificatedFirebase 规则匿名和经过身份验证
【发布时间】:2019-03-06 09:21:10
【问题描述】:

我正在尝试为我的 Firebase 用户编写规则。

我的目标是制定一个规则,允许在数据库中写入/读取:

  1. 匿名用户通过Firebase auth 进行身份验证,这些用户是临时匿名帐户
  2. 经过身份验证的用户拥有电子邮件和密码。

我怎样才能做到这一点?

【问题讨论】:

    标签: firebase firebase-authentication


    【解决方案1】:

    Firebase Realtime Database 中,您可以通过以下方式为所有已登录的人授予访问整个数据库的权限:

    {
      "rules": {
        ".read": "auth.uid !== null",
        ".write": "auth.uid !== null"
      }
    }
    

    Cloud Firestore 中,您可以使用以下规则完成相同的操作:

    service cloud.firestore {
      match /databases/{database}/documents {
        match /{document=**} {
          allow read, write: if request.auth.uid != null;
        }
      }
    }
    

    请注意,这两个示例都来自 Firebase 文档,因此我强烈建议您花一些时间研究一下。

    【讨论】:

    • 也许我的问题不够清楚(我得到了一个糟糕的-4)。我正在使用 Firebase 身份验证。用户可以被匿名认证,这与任何人和认证用户不同。我想要实现的是让这两种类型的用户读/写和拒绝其他用户。
    • 我更新了我的答案来做到这一点。请注意,通过阅读我链接的相关 Firebase 文档,很容易找到这两个 sn-ps。
    • 我虽然必须对认证和匿名进行逻辑测试。感谢您抽出宝贵时间。
    • 匿名登录的用户也经过身份验证,只是没有被识别。
    【解决方案2】:

    我不同意接受的答案。如果用户被认证为匿名用户,他仍然有 UID,所以检查它是否为空并不能解决问题。

    'auth' 变量具有 'provider' 属性,因此您只需检查用户是否通过电子邮件和密码或匿名身份验证:

    {
      "rules": {
        ".read": "auth.provider != 'anonymous'",
        ".write": "auth.provider != 'anonymous'"
      }
    }
    

    更多来自文档:https://firebase.google.com/docs/reference/security/database#variables

    【讨论】:

    • 我认为这应该是公认的答案,谢谢!
    • 如果您不想允许匿名用户访问数据,则不应在 Firebase 控制台中启用匿名身份验证。在这种情况下,OP 明确要求允许匿名身份验证的用户访问他们的数据。
    • 如果有人在寻找 Firestore,那就是 request.auth.sign_in_provider != 'anonymous' (ref)
    猜你喜欢
    • 2016-06-08
    • 1970-01-01
    • 1970-01-01
    • 2019-06-15
    • 2018-10-10
    • 2021-10-11
    • 2019-01-20
    • 1970-01-01
    • 2017-06-03
    相关资源
    最近更新 更多