javascript - remove - La mejor manera de administrar canales de chat en Firebase
post firebase (3)
En mi página principal tengo una lista de usuarios y me gustaría elegir y abrir un canal para chatear con uno de ellos.
Estoy pensando si usar la identificación es la mejor manera y controlar el acceso a un canal como USERID1-USERID2.
Pero, por supuesto, el usuario 2 también puede abrir el mismo canal, por lo que me gustaría encontrar algo más fácil de controlar.
Por favor, si quieres ayudarme, dame un ejemplo en javascript usando una url / matriz de firebase.
¡Gracias!
El hashing con el módulo js-sha256 funcionó para mí con las instrucciones de Frank van Puffelen y Eduard.
import SHA256 from ''crypto-js/sha256''
let agentId = 312
let userId = 567
let chatHash = SHA256(''agent:'' + agentId + ''_user:'' + userId)
En un esquema de base de datos típico, cada Channel / ChatGroup tiene su propio nodo con la clave $ única (creada por Firebase). No debería importar qué usuario abrió el canal primero, pero una vez que se crea el nodo (y la correspondiente tecla $), puede usarlo como ID de canal.
La estrategia Hashing / MD5, por supuesto, es otra forma de hacerlo, pero también debe almacenar esa información de "ruta", así como $ key en el mismo nodo, que es duplicación IMO (a menos que me falte algo).
Una forma común de manejar tales salas de chat 1: 1 es generar la URL de la sala en función de los ID de usuario. Como ya mencionó, un problema con esto es que cualquiera de los usuarios puede iniciar el chat y en ambos casos deben terminar en la misma sala.
Puede resolver esto ordenando los identificadores de usuario lexicográficamente en la clave compuesta. Por ejemplo, con nombres de usuario, en lugar de identificadores:
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>
Una pregunta de seguimiento común parece ser cómo mostrar una lista de salas de chat para el usuario actual. El código anterior no aborda eso. Como es común en las bases de datos NoSQL, debe aumentar su modelo de datos para permitir este caso de uso. Si desea mostrar una lista de salas de chat para el usuario actual, debe modelar sus datos para permitirlo. La forma más fácil de hacer esto es agregar una lista de salas de chat para cada usuario al modelo de datos:
"userChatrooms" : {
"Frank" : {
"Eusthace_Frank": true
},
"Eusthace" : {
"Eusthace_Frank": true
}
}