push()期间ID创建的时间和位置

时间:2012-11-17 23:24:42

标签: firebase

documentation for 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是如何创建的,所以我可以确保我正确地使用它们。

1 个答案:

答案 0 :(得分:2)

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

ID生成算法基于时间戳(以便ID保持有序)和随机后缀(比它更多,但这是基础)。该算法的设计使得没有两个非恶意客户端在我们有生之年(甚至数百万年)中都不会选择相同的密钥。

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

相关问题