【问题标题】:Firebase set security and rules for current userFirebase 为当前用户设置安全和规则
【发布时间】:2016-07-09 17:43:27
【问题描述】:

我试图让授权的当前用户读取和写入他自己的数据到 Firebase 数据库。我的安全数据如下所示:

{
  "features" : {
    "-KDUBJIPwvLCK-1lV4bM" : {
      "e1fd0ccb-370a-4a6f-86af-87fdf97d25a0" : "een"
    },
    "-KDUBLUr6K_PMxWkgcof" : {
      "e1fd0ccb-370a-4a6f-86af-87fdf97d25a0" : "twee"
    }
  },
  "users" : {
    "e1fd0ccb-370a-4a6f-86af-87fdf97d25a0" : {
      "email" : "tjalling@horecalife.nl",
      "image" : "iVBORw0KGgoAAAANSUhEUgAAASwAAAEsCAYAAAB5fY51AAAAAXNSR0IArs4c6QAA\r\nABxpRE9UAAAA",
      "name" : "tjalling dijkstra",
      "telephone number" : "06580055"
    }
  }
}

-KDUBJIPwvLCK-1lV4bM 是从childByAutoId() 方法获取的 autoId

e1fd0ccb-370a-4a6f-86af-87fdf97d25a0 是一个 uid(唯一的用户 ID)。

een是某个特征的值。

我的安全规则是:

{
  "rules": {
    "users": {
      "$uid": {
        ".read": "auth != null && auth.uid == $uid",
        ".write": "auth != null && auth.uid == $uid"
      }
    },
    "features": {
      "$autoId" : { 
      "$uid": {
        ".read": "auth != null && auth.uid == $uid",
        ".write": "auth != null && auth.uid == $uid"
      }
    }
  }
}
}

如果我这样编写 Firebase 规则,则功能部分会拒绝 setValue() 的权限。

2016-03-22 17:51:27.077 Herodus[884:228445] [Firebase] setValue: 或 removeValue: at /features/-KDUEEZ4z-FCAoUci-rW 失败:permission_denied。

这个代码sn-p添加了一个新特性:

let featureContents = addFeatureTextField.text 
if featureContents != "" { 
  let newFeature: String = featureContents! 
  let featureDict = [ uid: newFeature] 
  let ref = DataService.dataService.FEATURE_REF.childByAutoId()
  ref.setValue(featureDict)

有人知道我在这里做错了什么吗?

【问题讨论】:

  • 您在问题中包含了 JSON 树和安全规则的图片。请用实际的 JSON 和安全规则作为文本替换它。您可以通过单击 Firebase 数据库中的导出按钮轻松获取 JSON。将 JSON 和安全规则作为文本使其可搜索,使我们能够轻松地使用它们来测试您的实际数据并在我们的答案中使用它们,一般来说这是一件好事。
  • 您的问题下方有一个edit 链接,可让您将其放入您的问题中。
  • 希望您能帮我解答 Frank,作为 Firebase 的工程师 ;-)
  • 好的。你已经添加了这些部分,我已经将它编辑成更易读的东西。现在您可以添加失败操作的代码 sn-p 吗?请务必包含您正在写入的数据以及将其写入的位置的必要详细信息。
  • 谢谢弗兰克!非常感激。起初,这是错误消息:2016-03-22 17:51:27.077 Herodus[884:228445] [Firebase] setValue: or removeValue: at /features/-KDUEEZ4z-FCAoUci-rW failed: permission_denied。使用此代码 sn-p 添加了一个新功能: let featureContents = addFeatureTextField.text if featureContents != "" { let newFeature: String = featureContents! let featureDict = [ uid: newFeature] let ref = DataService.dataService.FEATURE_REF.childByAutoId() ref.setValue(featureDict)

标签: ios swift firebase firebase-security firebase-realtime-database


【解决方案1】:

您正在写入此路径:

/features/-KDUEEZ4z-FCAoUci-rW 

您的规则仅授予此路径的写入权限:

/features/$autoId/$uid

您需要使用以下方式写入数据:

ref.childByAppendingPath(authData.uid).setValue(featureDict)

【讨论】:

    猜你喜欢
    • 2019-09-15
    • 1970-01-01
    • 2016-07-16
    • 2019-07-03
    • 2018-09-21
    • 2021-04-09
    • 1970-01-01
    • 2016-06-27
    • 1970-01-01
    相关资源
    最近更新 更多