0

から私はこのようなfirebaseデータベース構造を得た:質問は、私はuser2のにメッセージをチャット書くために(場合USER1で)ユーザーを防ぐないか、であるFirebaseセキュリティ防止の保存データその他ユーザー

database 
    - chat 
     -user1 
      -user2 
       -chat1 
        -message : a 
     -user2 
      -user1 
       -chat1 
        -message : a 
      -user3 
       -chat1 
        -message : a 
     -user3 
      -user2 
       -chat1 
        -message : a 

からuser3までです。

例:

イムuser1のjavascriptの

firebase.database().ref("chat/user2/user3/chat2").set({ 
    message: "HAHA" 
}); 

コマンドは、上記の私user1のとしてメッセージuser3にからuser2ののための新しいチャットを書くことと言っコマンドを使用して、 "HAHA"。私はfirebaseのルールでこの事件を防止したい。誰かがルールを書いて、サインインする方法を手伝ってもらえますか?

ありがとうございます。

答えて

1

次のように構造を持っているように見えます:送信者のみを書くことができることを確保

chats 
    $recipientUid 
     $senderUid 
      $chatMessageId 

は次のようになります。

{ 
    "rules": { 
    "chat": { 
     "$recipientUid": { 
     "$senderUid": { 
      ".write": "auth.uid == $senderUid" 
     } 
     } 
    } 
    } 
} 

内の特定のユーザー間でメッセージを保存するために、より一般的ですしかし、構造のようなチャットルーム。 Best way to manage Chat channels in Firebase

+0

おかげで、今の問題はのuidがfirebaseユーザーからgenereatedのuidがないことです...それは、ユーザー(ユーザー名)から文字列です..私は比較することができますユーザーの指定した文字列を持つsenderUid?私は今データベースを再構築することができないと思う.500人以上の人がそれを使っていて、それらのチャットをすべて削除することはできない。 – RaiN

+0

特定のユーザーにデータへのアクセスを保護するには、関連付けるセキュリティルール特定のユーザーを持つノード。これは 'auth'変数によってのみ可能です。最も一般的なプロパティは 'auth.uid'です。カスタムトークンを作成しない限り、 'username'はauth変数の一部ではないので、それに基づいてアクセスを保護することはできません。 –

+0

auth.token.nameはどうですか?それを使うことはできますか? – RaiN

0

firebase documentationからデータ構造を試しましたか?あなたのケースでは、それを行うことはちょっとできないと思うので、データベース構造を平坦化する必要があるからです。 ワイルドカードを使用できるかもしれませんが、1つのクライアントには1つのuidしかないので、それでもやりにくいです。したがって、フロントエンドで自分のuidを知らなくても、他のユーザーのノードに「chat message」を書くことはできません。

私のアドバイスは、チャット参加者が自分のチャットデータベースにアクセスする方法を考えて構造を変更しようとしていますか?各ユーザーが他のユーザーが読むことができる「チャットルーム」内の自分のノードに書き込むことができるルールを単純に使用することができます。 CMIIW

に関して、

RM回答先生のための

関連する問題