gpt4 book ai didi

javascript - 在 Firebase 中管理聊天 channel 的最佳方式

转载 作者:行者123 更新时间:2023-11-30 13:43:53 26 4
gpt4 key购买 nike

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

我在想使用id是否是最好的方法并控制像USERID1-USERID2这样的 channel 的访问。

但是,当然,用户 2 也可以打开相同的 channel ,所以我想找到更容易控制的东西。

如果您想帮助我,请给我一个使用 firebase url/array 的 javascript 示例。

谢谢!

最佳答案

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

您可以通过在复合键中按字典顺序对用户 ID 进行排序来解决此问题。例如使用用户名而不是 ID:

var user1 = "Frank"; // UID of user 1
var user2 = "Eusthace"; // UID of user 2

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="https://getfirebug.com/firebug-lite-debug.js"></script>

常见的后续问题似乎是如何显示当前用户的聊天室列表。上面的代码没有解决这个问题。正如 NoSQL 数据库中常见的情况,您需要增强数据模型以支持此用例。如果您想显示当前用户的聊天室列表,您应该对数据进行建模以允许这样做。最简单的方法是将每个用户的聊天室列表添加到数据模型中:

"userChatrooms" : {
"Frank" : {
"Eusthace_Frank": true
},
"Eusthace" : {
"Eusthace_Frank": true
}
}

如果您担心 key 的长度,可以考虑使用组合 UID 的哈希码而不是完整的 UID。

<小时/>

上面的最后一个 JSON 结构也有助于保护对房间的访问,因为您可以编写安全规则以仅允许在其 userChatrooms 节点下列出房间的用户访问:

{
"rules": {
"chatrooms": {
"$chatroomid": {
".read": "
root.child('userChatrooms').child(auth.uid).child(chatroomid).exists()
"
}
}
}
}

关于javascript - 在 Firebase 中管理聊天 channel 的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35214376/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com