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

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

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

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

Спасибо!

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

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

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

Похоже, что последующие вопросы — как показать список комнат чата для текущего пользователя. Код выше не относится к этому. Как это часто бывает в базах данных NoSQL, вам нужно расширить модель данных, чтобы разрешить этот вариант использования. Если вы хотите показать список чатов для текущего пользователя, вы должны смоделировать свои данные, чтобы разрешить это. Самый простой способ сделать это — добавить список чатов для каждого пользователя в модель данных:

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

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

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

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

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