Miglior modo per gestire i canali di chat in Firebase

Nella mia pagina principale ho un elenco di utenti e vorrei scegliere e aprire un canale per chattare con uno di loro.

Penso che se utilizzi l'id è il modo migliore e controlla l'accesso di un canale come USERID1-USERID2.

Ma ovviamente, l'utente 2 può aprire lo stesso canale, quindi vorrei trovare qualcosa di più facile da controllare.

Per favore, se vuoi aiutarti, mi dia un esempio nel javascript usando un url / arrays firebase.

Grazie!

Un modo comune per gestire tali chat room 1: 1 è generare l'URL della stanza in base agli id ​​degli utenti. Come già accennato, un problema con questo è che entrambi gli utenti possono avviare la chat e in entrambi i casi dovrebbero finire nella stessa stanza.

Puoi risolvere questo problema ordinando gli id ​​degli utenti in modo leksografico nella chiave composta. Ad esempio con i nomi utente anziché gli id:

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> 

Hashing con il module js-sha256 ha lavorato per me con indicazioni di Frank van Puffelen e Eduard.

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

In uno schema di database tipico each Channel / ChatGroup possiede un proprio nodo con chiave univoco $ (creata da Firebase). Non import quale utente ha aperto prima il canale, ma una volta creato il nodo (& chiave corrispondente $), puoi utilizzare questo come ID del canale.

La strategia di Hashing / MD5 ovviamente è altrimenti da farlo, ma devi anche memorizzare la "route" info e $ key sullo stesso nodo – che è IMO duplicazione (a less che Im manca qualcosa).