1

push的文档让我做了这个小实验:

var FB = new Firebase(MYURL);
var ref = FB.push({test: 'push'}, function() { console.log('callback completed'); });
console.log(ref.name());

我看到ref.name()即使在调用异步回调之前,调用也会立即返回一个 ID。这是否意味着在没有咨询服务器的情况下在客户端创建 ID?我假设是这样,这引起了人们的好奇:

如果两个客户端发送相同的 ID,服务器将如何处理冲突?第二个会覆盖第一个吗?

我在这里不是假设两个客户端会创建冲突的 ID,而是假设恶意客户端可能会欺骗 ID 并覆盖现有记录。在为即将到来的安全性配置规则时,我需要注意这个问题吗?

更重要的是,我非常想知道 ID 是如何创建的,因此我可以确保正确使用它们。

4

1 回答 1

2

push 创建的 ID 是在调用 push 时创建的。我们这样做是为了让您拥有一个响应速度非常快的客户端,而不必等待网络延迟,并且您的客户端也可以在离线模式下工作。

ID 生成算法基于时间戳(以便 ID 保持有序)和随机后缀(除此之外还有更多内容,但这是基础知识)。该算法的设计是为了在我们的有生之年(甚至数百万年)中没有两个非恶意客户端会选择相同的密钥。

如果没有强制执行安全措施,恶意客户端可能会覆盖其他人的 ID(尽管他们很难猜测其他客户端将生成的 ID),是的,如果您需要为这些位置提供安全保护想防止这种情况。我不认为“push()”ID 具有其他位置没有的任何独特的安全需求。

于 2012-11-18T13:56:36.533 回答