问题标签 [firebase]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
392 浏览

firebase - 拦截数据更改并从服务器更改/验证

我正在研究一种解决方案,以拦截来自我们的 node.js 服务器的数据更改,并在它们存储/同步到其他客户端之前验证/更改它们。

有关如何使用当前代码库解决此问题的任何策略或建议?

目前,似乎唯一的选择是在同步操作后重写它。这意味着每个客户端可能会收到同步(包括服务器),然后服务器将重写数据并触发第二次同步。

为了帮助理解问题的背景,这似乎是满足我需求的理想策略:

  • 服务器获得客户端不可用的特殊令牌/密钥(当安全出现时)
  • 服务器注册一个依赖注入,如firebase.child('widgets').beforeSync(myCallback)
  • 客户端同步数据
  • 通知服务器回调
  • 服务器修改或验证数据
  • 如果有效,它会将其返回到 firebase 以进行同步操作
  • 如果无效,则中止同步并返回给客户端的错误
0 投票
1 回答
1535 浏览

firebase - Firebase 条目可以在其名称中包含逗号吗?

所以用逗号命名可以正常工作。但是,假设您想将 url 传递给 ref。

toString() 函数返回一个版本的 url,其中逗号替换为“%2C”。如果 URL 仍然可用,这将很好。

这是一个错误,还是有充分的理由让用户必须做类似的事情

为了获得可用的 Firebase URL?

0 投票
2 回答
2745 浏览

firebase - 如何创建具有多个工作人员的队列?

我想创建一个队列,客户端可以在其中放入请求,然后服务器工作线程可以将它们拉出,因为它们有可用的资源。

我正在探索如何使用 Firebase 存储库来做到这一点,而不是使用外部队列服务,然后必须将数据注入 Firebase。

考虑到安全性和验证工具,这里有一个简单的例子来说明我的想法:

  • 用户将请求推送到“队列”存储桶中
  • 服务器拉出请求并将其删除(如何确保只有一台服务器收到请求?
  • 服务器验证数据并从私有存储桶中检索(或注入新数据)
  • 服务器将数据和/或错误推送回用户的存储桶

在此处输入图像描述

一个可能有用的简化示例是身份验证:

  • 用户将身份验证请求放入公共队列
  • 他的登录名/密码进入他的私人存储桶(只有他可以读/写的地方)
  • 服务器获取身份验证请求,检索登录名/密码,并针对只有服务器可以访问的私有存储桶进行验证
  • 服务器将令牌推送到用户的私有存储桶中

(当然,公共队列中仍然存在一些安全漏洞;我现在只是在探索)

其他一些使用示例:

  • 只读状态队列(用户状态通过私有存储桶进行通信,服务器将其写入公共存储桶,该存储桶对公众只读)
  • 消息队列(消息通过用户发送,服务器决定将它们放入哪些讨论桶)

所以问题是:

  1. 这是一个很好的设计,可以很好地集成到即将到来的安全计划中吗?正在探索哪些替代方法?
  2. 如何让所有服务器监听队列,但只有一个服务器来接收每个请求?
0 投票
6 回答
64088 浏览

firebase - 检测 Firebase 连接是否丢失/重新获得

是否有一种策略可以在当前的 Firebase 产品中起作用,以检测服务器连接是否丢失和/或重新获得?

我正在考虑移动设备的一些离线突发事件,我想要一种可靠的方法来确定 Firebase 数据层何时可用。

0 投票
2 回答
10116 浏览

json - firebase 中的 json 数据格式 - 是否支持数组?和/或者,如果只支持对象,字典可以用整数编号吗?

我正在修补 firebase 并对数据结构感到好奇。浏览我的数据库,firebase 允许我修改我的数据库中的结构和数据。但似乎 firebase 只支持对象(和列表的字典)。

我想知道是否支持数组。我还想知道字典项是否可以用整数命名——firebase 接口只插入字符串作为名称,这让我担心记录的排序。

以下是通过 firebase 接口创建的 json 示例:

显然,对于我的列表,我希望字典项目名称是整数,这样我可以确保排序是正确的。

0 投票
1 回答
4487 浏览

firebase - 从 Firebase 的引用中正确使用 hasChild() 和 forEach()?

以我有限的理解和 SQL 背景,我不太了解 hasChild() 和 forEach(); 的用法。他们觉得他们属于参考而不是快照。

(我将在余下的讨论中使用 hasChild(),但这些概念是可以互换的。)

这是我的推理:

  1. 我有一个需要用户表的 Firebase 路径,比如说appname/users
  2. 我想查看用户(Fred)是否存在
  3. 我得到一个参考:var users = new Firebase('appname/users')

但我无法确定这里是否有孩子。所以这就是我现在所拥有的:

但这并不完全奏效。因此,现在我必须通过以下方式获取用户的价值(感觉有点违反直觉,因为我对用户不感兴趣):

根据文档,我不认为通过 fetching 会产生很大的开销appname/users,但是如果我只想确定键“Fred”是否存在,这感觉就像是一段难看的代码。

我想看到类似的东西:

有没有更好的方法来使用 forEach/hasChild?我在这里错过了任何重要的逻辑考虑吗?

0 投票
2 回答
3746 浏览

javascript - 您如何或如何有效地使用 firebase 处理错误?

我一直在阅读 firebase 文档,它使用了非常多的异步代码。我想知道 firebase 是否在回调中抛出错误和/或传递错误数据。据我所知,文档没有提到它。提前感谢您的建议

0 投票
1 回答
3094 浏览

firebase - Firebase 获取记录总数的更好方法

来自交易文档,第二段:

这里的目的是让客户端增加发送的聊天消息的总数(暂时忽略有更好的实现方式)。

有哪些标准的“更好的方法”来实现这一点?

具体来说,我正在尝试做一些事情,比如检索最近的 50 条记录。这要求我从列表的末尾开始,所以我需要一种方法来确定最后一条记录是什么。

我看到的选项:

  • 每次添加记录时使用事务更新计数器,使用带有 setPriority() 的计数器值进行排序
  • forEach() 父级并读取所有记录,在客户端进行我自己的排序/过滤
  • 编写服务器代码来分析 Firebase 表并创建索引列表,如“mostRecent Messages”和“totalNumberOfMessages”

我错过了明显的选择吗?

0 投票
3 回答
2046 浏览

javascript - 防止定时器上的 JavaScript 注入

我正在制作一个浏览器游戏,其中每 10 秒i递增一次,并且积分算法用于i确定授予的积分数。(对我来说)显而易见的方法是使用setInterval(10000)计时器,并在函数内部运行点计算。

如何防止 JavaScript 注入增加 i,使应用程序认为用户实际上玩的时间比他实际玩的时间长?

我使用 Firebase 作为后端。作为一名 PHP 程序员,我通常会在玩家提交分数时通过检查开始和结束时间来对玩家的分数进行服务器端验证。我想我也可以在 Firebase 中做到这一点,所以我可能只是回答了我自己的问题......

不过,有没有办法阻止 JavaScript 注入?(预防,而不是服务器端检测)。

0 投票
2 回答
860 浏览

javascript - Firebase 字段延迟更新

我有一个带有users参考的 Firebase,它有一个字段user_id。( [Firebase]/[app]/users/user_id)

我插入一个用户并分配一个 user_id。但是,当我从 userRef (对 的引用users)读取 user_id 的值时,它并没有第一次读取它。随后的读取工作非常好。

使用调试器,我可以看到在创建用户时,user_id分配了 a。似乎我的第一次调用刷新了 Firebase 参考,因此后续调用现在可以看到更新后的 Firebase(我不认为它是这样的——这就是它的显示方式)。

这是我读取值的代码user_id

第一次,警报显示0。之后每次都显示正确的值。

为了使问题变得更加奇怪,我还games引用了 a game_id,以与 . 相同的方式创建user。但是我的阅读game_id(以完全相同的方式和同时)每次都有效。

有任何想法吗?