2017-12-11 10 views
1

FirebaseとAngular5でWebアプリケーションを構築しています。私はプライベートルーム(パスワードで保護されている)の作成/参加を可能にしたいと考えています。Firebase:部屋のパスワードを保存する方法

現在、私はデータベースを設計する段階にあり、実際にfirebaseデータベースから実際のパスワードを取得せずにユーザーが正しい部屋のパスワードを入力しているかどうかを確認することはできません。

私はその点で雲の機能を使用すべきですか?それとも、firebaseで直接行うことができますか?何か不足していますか?

答えて

1

これはfirebaseで行うことができます。あなたのDBの

と仮定部分が同じようにレイアウトされています/chatRooms/$roomID/password

/chatRooms/$roomID/password = $PASSWORD

読み取り/書き込み許可がチャットルームの所有者に付与されます。次の検証と chatRooms/$roomId/users/$userId::あなたがにドキュメントを追加する必要があり、チャットルームのメンバーになる

エントリのuseridは、現在のユーザーでなければならない、とパスワードフィールドは、パスワードと同じでなければなりません。検証ルールは、ユーザーがデータにアクセスできない場合でも、データベース内のすべてのデータにアクセスできます。

以下は、基本的な原則を示す(テストされていない)例です。要するに

  1. のみチャットルームの管理者は、パスワードを設定することができます。誰もそれを読むことはできません。
  2. チャットデータは、そのuidがコレクションにメンバーを追加するメンバーのコレクション
  3. であれば、彼らは(時)に等しいパスワードを記述する必要があり、ユーザーが読み取ることができる部屋のパスワード

コード:

+0

妥当な解決策のようです。 "エントリのuserIdは現在のユーザーでなければならず、パスワードフィールドはパスワードと同じでなければなりません。ユーザーがデータにアクセスできない場合でも、検証ルールはデータベース内のすべてのデータにアクセスできます。 " ユーザーにパスワードを書く必要がありますか? chatRooms/$ roomId/users/$ userId 私はfirebaseルールを初めて使いました。 –

+0

>であり、パスワードフィールドはパスワードと同じでなければなりません。 パスワードフィールドはどのパスワードと同じでなければなりませんか?実際にデータベースに書き込むことなく、どのように提供しますか? –

+0

@DaniilAndreyevichBaunovドキュメントはここで説明します。 https://firebase.google.com/docs/database/security/あなたがそれらを読んでいると分かります。ユーザは '/ users'コレクションに自分自身を書くようにATTEMPTする必要があります。成功した場合は、パスワードを知っている必要があります。 – z5h

1

これを行うには、サーバーを必要としない方法の1つは、パスワードを部屋のパスに埋め込むことです。誰でも読むことができ、これらの規則で

{ 
    rules: { 
    messages: { 
     "$roomid": { 
     ".read": true 
     } 
    "roomnames: { 
     ".read": true 
    } 
    } 
} 

:たとえば:あなたが部屋「一般」、パスワード「correcthorsebatterystaple」を持っている場合、あなたはこれをモデル化することができます:

messages 
    general_correcthorsebatterystaple 
roomnames 
    general 

とで固定します部屋名のリスト。しかし、名前のパスワードも知っていれば、部屋のメッセージだけを読むことができます。

関連する問題