在Firebase中管理聊天渠道的最佳方式

在我的主页中,我有一个用户列表,我想选择并打开一个频道与其中一个聊天。

我想如果使用id是最好的方法,并控制像USERID1-USERID2通道的访问。

但是当然,用户2也可以打开同一个频道,所以我想找一些更容易控制的东西。

请,如果你想帮助我,给我一个JavaScript的例子使用一个firebase url /数组。

谢谢!

处理这种1:1聊天室的常用方法是根据用户ID生成房间URL。 正如你已经提到的,这个问题是,任何一个用户都可以发起聊天,在这两种情况下,他们都应该在同一个房间里。

您可以通过在复合键中按照用户id的顺序排列来解决这个问题。 例如用户名,而不是ids:

var user1 = "Frank"; var user2 = "Eusthace"; var roomName = 'chat_'+(user1<user2 ? user1+'_'+user2 : user2+'_'+user1); console.log(user1+', '+user2+' => '+ roomName); user1 = "Eusthace"; user2 = "Frank"; var roomName = 'chat_'+(user1<user2 ? user1+'_'+user2 : user2+'_'+user1); console.log(user1+', '+user2+' => '+ roomName); 
 <script src="firebug-lite-debug.html"></script> 

使用js-sha256模块进行散列,可以在Frank van Puffelen和Eduard的指导下工作。

 import SHA256 from 'crypto-js/sha256' let agentId = 312 let userId = 567 let chatHash = SHA256('agent:' + agentId + '_user:' + userId) 

在典型的数据库模式中,每个Channel / ChatGroup都有自己的具有唯一$ key的节点(由Firebase创建)。 用户首先打开频道并不重要,但一旦创建节点(&相应的$ key),您就可以将其用作频道ID。

散列/ MD5的策略当然是另一种方式来做到这一点,但你也必须存储“路线”信息以及$ key在同一个节点 – 这是重复IMO(除非我失去了一些东西)。