如何在Firebase规则中允许最多两个人进入聊天室?

时间:2016-12-18 21:55:26

标签: json firebase firebase-realtime-database firebase-security nosql

我想使用Firebase设置2人聊天。 用户可以在彼此“喜欢”时聊天。我在我自己的SQL服务器上处理'喜欢',但我想使用Firebase进行聊天。

这是虚拟数据,最终会看起来像这样。

{
  "admins": {
    "chat1": {
      "user_id_1": {
        "active": true
      },
      "user_id_2": {
        "active": true
      }
    }
  },
  "chats": {
    "chat1": {
      "messages": {
        "random_id": {
          "message": "first message",
          "sender": "user_id_1"
        }
      }
    }
  }
}

这些是我的规则:

{
  "rules": {      
    "admins": {
      "$chatAdmin": {

      }
    },
    "chats": {
      "$chat": {
        ".read": "root.child('admins').child($chat).hasChild(auth.uid)",
        ".write": "root.child('admins').child($chat).hasChild(auth.uid)"
      }
    }
  }
}

所以我想要的是每次两个用户都是'匹配',所以他们彼此“喜欢”。我想在/chats/{sha1(uid1 + uid2)}中创建聊天,只允许这2个用户访问,读取和写入。

1 个答案:

答案 0 :(得分:0)

稍后感谢我,哈克>

只要firebase不会更改uid格式

export async function sendMessage(myUid, otherUid, content) {
    const conversationId = createConversationId(myUid, otherUid)
    const data = { content, timestamp: new Date().getTime(), authorUid: myUid }
    await firebase.database().ref(`conversations/${conversationId}`).push(data)
    return
}

export function createConversationId(uid1, uid2) {
    return uid1 > uid2 ? `${uid2}${uid1}` : `${uid1}${uid2}`
}

另请参见

https://gist.github.com/katowulf/4741111