Лучший способ управлять чат-каналами в Firebase

На моей главной странице у меня есть список пользователей, и я бы хотел выбрать и открыть канал для общения с одним из них.

Я думаю, что если использовать идентификатор, это лучший способ и контролировать доступ к каналу, например USERID1-USERID2.

Но, конечно, пользователь 2 может открыть тот же канал, поэтому я хотел бы найти что-то более легкое в управлении.

Пожалуйста, если вы хотите мне помочь, дайте мне пример в javascript, используя url/array firebase.

Спасибо!

Ответ 1

Обычный способ обработки таких комнат чата 1:1 - создание URL-адреса комнаты на основе идентификаторов пользователей. Как вы уже упоминали, проблема в том, что любой пользователь может инициировать чат, и в обоих случаях он должен оказаться в одной комнате.

Вы можете решить эту проблему путем лексикографического заказа идентификаторов пользователя в составном ключе. Например, с именами пользователей вместо идентификаторов:

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>

Ответ 2

В типичной схеме базы данных каждый канал /ChatGroup имеет свой собственный node с уникальным ключом $(созданным Firebase). Не важно, какой пользователь сначала открыл канал, но как только будет создан node (& соответствующий $key), вы можете просто использовать это как идентификатор канала.

Конечно, стратегия Hashing/MD5 - это другой способ сделать это, но тогда вам также нужно сохранить эту информацию о маршруте, а также ключ $в том же node, который является дублированием IMO (если только Im не пропускает что-то).

Ответ 3

Хеширование модулем js-sha256 работало для меня с направлениями Франка ван Пуффелена и Эдуарда.

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