【问题标题】:Firebase retrieves snapshot value as nullFirebase 将快照值检索为 null
【发布时间】:2017-10-08 16:20:04
【问题描述】:

我在 Firebase 中使用了 .once( 函数,并成功检索了目录的 snapshot.key NAME。但是这个键也有一个值。 当请求 snapshot.val() 时也会给出 null 鄙视它有一个值。

数据库如下所示:

    stages {
    stage1AVERYLONGHASH : "values i want to get"
    stage2AVERYLONGHASH : "values i want to get"
    }

我的代码

    var ref = "stage1AVERYLONGHASH";
    var branch = firebase.database().ref(ref).once('value').then(function(s){
    console.log(s.key); // GIVES THE CORRECT ANSWER
    console.log(s.val()); //GIVES null ... doesn't give me the "values i want.."

我做错了吗? 我是 Firebase 的新手。 请注意,数据库是故意这样构造的。 我限制了“阶段”的读取权限。 游戏的工作原理只是从数据库中请求哈希作为参考,以获取内容。

【问题讨论】:

  • 你确定你的参考是正确的吗?根据您显示的结构,我认为 ref 应该是“/stages/stage1”
  • 我不希望任何人通过这些阶段进行查询,因为它们必须隐藏在数据库中。这样可以吗?
  • 我对 /stages/ 的权限有限
  • 我不熟悉数据库规则,但据我所知,您需要将 ref 设置为 stage1 节点。看起来,如果stages上面没有父节点,那么ref应该是“/stages/stage1”。那么“/stages”上的读取权限应该由规则配置。
  • 但是授予对阶段的读取权限将导致 XSS 能够读取子节点,我不希望任何人知道 /stages 的子节点,除非他们知道哈希。

标签: javascript firebase firebase-realtime-database


【解决方案1】:

我想你应该得到舞台的参考,然后从他那里得到 stage1 参考:

.ref("stage").child("stage1")

我不确定实际的语法,但我知道这是我在 android studio 中获取 firebase 数据的方式

【讨论】:

  • 谢谢,是的,数据库的结构很奇怪,因为我需要保护“舞台”的所有孩子,我不希望任何不知道孩子钥匙的人阅读它们。
  • 你不应该把孩子的名字算作安全措施,你应该使用firebase身份验证系统
  • 孩子的名字是一个很长的哈希,我希望人们能够在没有身份验证的情况下玩它。
  • 我还没有尝试过身份验证,这会使情况恶化,因为我什至没有做这个简单的事情。
  • 开始使用 firebase 实时数据库的最佳方式是使用 postman,只需尝试使用其完整 URL 访问值,即可在 firebase 控制台中获取每个值的完整 URL
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-06-25
  • 1970-01-01
  • 1970-01-01
  • 2019-06-15
  • 2016-10-28
  • 2017-05-29
  • 2020-08-05
相关资源
最近更新 更多