0

我想要创建的只是一个“房间制造商”应用程序。

这只是一个应用程序,如果用户输入房间号并单击“加入”按钮,

新房间被创建并且用户去房间(路线)。

在 Firebase 中,我想知道如何检测房间是否已经存在。

我想制作如下代码。

如果房间存在,

console.log("The room is existing.");

如果不,

console.log("You created new room!");

我的代码(部分)如下

    //Firebase Set
    var ref = new Firebase('https://blinding-inferno-7068.firebaseio.com/');

    //Room set
    $scope.roomNum = $stateParams.roomNum;
    var roomsRef = ref.child('rooms');
    var roomNumRef = roomsRef.child($scope.roomNum);
    roomNumRef.set({roomNum:$scope.roomNum});

我完成了制作新房间的代码,但是如何检测房间是否已经存在?

4

1 回答 1

2

如果我理解您的核心要求,那就是:如果房间尚不存在,则当前用户创建它,其他人无法再创建该房间

这对我来说就像一笔交易。

roomNumRef.transaction(function(current) {
  if (!current) {
    console.log('You created the room');
    return {
      creator: 'nujabes',
      createdAt: Firebase.ServerValue.TIMESTAMP
    }
  }
  else {
    console.log('The room already existed');
  }
});

使用房间节点的当前值调用事务处理程序。如果您从处理程序返回一个值,该值将设置在房间节点。如果你什么都不返回,房间节点将保持不变。

由于 Firebase 会修剪空节点,因此我们必须返回一些值。在这种情况下,我设置creator为硬编码值。但是您可能想要识别实际用户。

请注意,仅当两个用户都使用此代码时,以上内容才能防止两个用户创建同一个房间。恶意用户可以轻松地针对您的 Firebase 数据库运行他们自己的代码,并且仍然占据其中的任何空间。为了防止这种情况,您需要设置防止这种情况的安全规则。阅读有关 Firebase 安全规则的文档以了解如何执行此操作。

于 2015-06-27T16:10:33.293 回答