Я собираю приложение для онлайн-чата, используя Nuxt JS, Express JS, Mon go DB и Socket.io
Я новичок в socket.io и Mon go DB, и я изо всех сил пытаюсь придумать теорию обмена личными сообщениями. В настоящее время пользователь регистрируется и входит в систему с помощью токена JWT. Есть список пользователей (контактов), которых я могу получить из БД. Каждый контакт содержит базовую c информацию, но я также генерирую UUID, чтобы, например, Роберт сообщения Джейн , URL-адрес мог выглядеть так:
https://example.com/conversation/xxxx-xxxx-xxxx-xxxx-xxxx-xxxx -> UUID пользователя, чтобы я мог отправить сообщение на интерфейсе:
this.socket.emit('msg', {
toid: self.$route.params.id, // this is the UUID from the url
msg: self.composer.message, // nmessage
name: self.$store.state.auth.user.uuid // will be replaced with the name
})
И затем на стороне сервера у меня есть следующий прототип :
let users = []
let messages = []
let index = 0
const port = 3030
io.on('connection', socket => {
// socket.emit('message', 'Welcome to Memo Chat')
socket.on("private", function(data) {
io.sockets[data.to].emit("private", { from: client.id, to: data.to, msg: data.msg });
socket.emit("private", { from: client.id, to: data.to, msg: data.msg });
});
socket.emit('loggedIn', {
users: users.map(s => s.username),
messages: messages
})
socket.on('newUser', username => {
console.log(`${username} has joined`)
// socket.username = username
// socket.id = socket.id
users.push({
id: socket.id,
username: username
})
let len = users.length;
len--;
io.emit('userOnline', users, users[len].id)
})
socket.on('msg', data => {
let message = {
msg: data.msg,
name: data.name
}
messages.push(message)
console.log(data)
socket.broadcast.to(data.toid).emit('sendMsg', message)
})
socket.on('disconnect', () => {
console.log(`${socket.username} has left`)
for(let i=0; i < users.length; i++){
if(users[i].id === socket.id){
users.splice(i,1);
}
}
io.emit('exit', users);
})
// socket.broadcast.emit('message', 'A new user has joined the chat')
// socket.on('disconnect', () => {
// io.emit('message', 'A user has left the chat')
// })
})
Проблема в том, что я могу заставить его отправлять сообщение другому человеку, однако все вошедшие в систему пользователи видят сообщение, и тогда я не уверен, как я могу сделать это безопасным , очевидно, что пользователь должен войти в систему, чтобы отправить сообщение, но теоретически они могут изменить свой UUID на чужой, чтобы подделать сообщение, исходящее от этого человека.
Есть какой-нибудь совет? Фрагменты кода будут использоваться для обмена личными сообщениями с JWT и Socket.io?