【问题标题】:Firebase: Permission denied - setValue()Firebase:权限被拒绝 - setValue()
【发布时间】:2017-12-01 22:42:59
【问题描述】:

我无法使用 setValue() 为我的 Firebase 数据库设置值。在日志中,它返回我的 setValue ... 权限被拒绝。我检查了我的规则:

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

【问题讨论】:

  • 您当前的规则要求用户未经身份验证。更有可能您想使用".write": true,它允许任何用户写入,无论他们是否经过身份验证。

标签: android firebase firebase-realtime-database firebase-security


【解决方案1】:

首先,您的用户必须经过身份验证,因为 Firebase 提供了许多平台来使用户通过它进行身份验证。示例 - 谷歌、Facebook、Twitter 等。 当用户通过 firebase 控制台进行身份验证时,他/她可以访问相关的数据库和存储。您还可以使用 Firebase 匿名身份验证将用户设为访客。

通过进行身份验证,每个用户都会获得一个 UID,如果您想为不同的用户制定不同的规则,您可以使用该 UID 通过编写规则来授予对他们的访问权限。

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

默认情况下,您将在数据库规则部分中得到类似的内容:-

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

这只是意味着如果用户经过身份验证,则只授予他们读写权限。适用于所有用户。

通过这样做,您可以让每个人以及那些不使用您产品的人都可以访问您的数据库。

{
  "rules": {
    ".read": true,
    ".write": true
  }
}

您可以这样做以测试您的产品,但这不是一种安全的方式。

【讨论】:

  • 感谢您提供信息。以后会很有用的
【解决方案2】:

尝试将您的规则更改为以下内容,它会起作用。

{
  "rules": {
    ".read": true,
    ".write": true
  }
}

根据 Frank van Puffelen 的评论,您的规则要求用户经过身份验证。

如果您需要更安全的身份验证,您可以阅读有关身份验证规则 here 的更多信息以了解其他选项

希望对你有帮助

【讨论】:

  • 谢谢,它有效。但是,在我可以使用我的规则从相同的数据库数据中获取数据之前。我的问题是为什么现在需要更改规则?这取决于用户注册吗?因为现在我正在将用户注册到授权中?请问你能回答吗
  • 使用上述权限,您是说任何人都可以在没有任何身份验证的情况下从该数据库读取和写入(无论他们是否经过身份验证)。使用您以前的代码,您是说不能通过身份验证。 IE。经过身份验证的用户不能做任何事情
猜你喜欢
  • 2015-07-06
  • 2015-11-25
  • 2016-09-23
  • 2020-02-15
  • 2017-12-26
相关资源
最近更新 更多