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ハードコードされた値に設定しました。しかし、おそらく実際のユーザーを特定したいと思うでしょう。

上記により、2 人のユーザーが両方ともこのコードを使用している場合にのみ、2 人のユーザーが同じルームを作成できないことに注意してください。悪意のあるユーザーは、Firebase データベースに対して独自のコードを簡単に実行し、そこにある部屋を要求することができます. これを防ぐには、これを防ぐセキュリティ ルールを設定する必要があります。その方法については、Firebase セキュリティ ルールに関するこのドキュメントをお読みください。

于 2015-06-27T16:10:33.293 に答える