web-dev-qa-db-fra.com

Meilleur moyen de gérer les canaux de discussion dans Firebase

Sur ma page principale, j'ai une liste d'utilisateurs et je voudrais choisir et ouvrir un canal pour discuter avec l'un d'entre eux.

Je pense que si utiliser l'identifiant est la meilleure façon et contrôler l'accès à un canal comme USERID1-USERID2.

Bien entendu, l'utilisateur 2 peut également ouvrir le même canal. J'aimerais donc trouver quelque chose de plus facile à contrôler.

S'il vous plaît, si vous voulez m'aider, donnez-moi un exemple en javascript en utilisant un url/array firebase.

Je vous remercie!

16
Eusthace

Une façon courante de gérer de telles salles de discussion 1: 1 consiste à générer l'URL de la salle en fonction des identifiants d'utilisateur. Comme vous l'avez déjà mentionné, l'un des problèmes réside dans le fait que l'un ou l'autre des utilisateurs peut lancer le chat et, dans les deux cas, il doit se retrouver dans la même pièce.

Vous pouvez résoudre ce problème en ordonnant les identifiants d’utilisateur lexicographiquement dans la clé composée. Par exemple avec des noms d'utilisateur, au lieu d'identifiants:

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>

Une question récurrente semble être de savoir comment afficher une liste de salles de discussion pour l'utilisateur actuel. Le code ci-dessus ne répond pas à cela. Comme c'est le cas dans les bases de données NoSQL, vous devez développer votre modèle de données pour permettre ce scénario d'utilisation. Si vous souhaitez afficher une liste de salles de conversation pour l'utilisateur actuel, vous devez modéliser vos données pour le permettre. Pour ce faire, la méthode la plus simple consiste à ajouter une liste de salles de conversation pour chaque utilisateur au modèle de données:

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

Dans un schéma de base de données typique, chaque groupe de canaux/groupes de discussions dispose de son propre nœud avec une clé $ unique (créée par Firebase). Peu importe l'utilisateur qui a ouvert le canal en premier, mais une fois le nœud (et la touche $ correspondante) créé, vous pouvez simplement l'utiliser comme identifiant de canal.

La stratégie de hachage/MD5 est bien sûr une autre façon de le faire, mais vous devez également stocker ces informations de "route" ainsi que la clé $ sur le même nœud - ce qui est une duplication IMO (sauf si quelque chose manque.).

2
Neo Split

Hashing avec le module js-sha256 a fonctionné pour moi avec les directives de Frank van Puffelen et Eduard.

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