我正在尝试验证聊天室的密码,但是当第二个用户进入时,它使我复杂了。应该由第一个用户定义密码,但是当第二个用户输入时,我无法保留第一个密码。
我在服务器端有这个:
//Run when client connects
io.on("connection", (socket) => {
socket.on("joinRoom", ({ username, room, password }) => {
const user = userJoin(socket.id, username, room, password);
socket.join(room);
socket.join();
});
在客户端:
//Join Chatroom
socket.emit("joinRoom", { username, room, password });
我已经完成了此功能,但与我之前讲的不一样:
服务器端:
socket.on("checkPassword", ({ username, room, password}) => {
const user = userJoin(socket.id, username, room);
if (password1 == password) {
io.sockets.emit("passwordFeedback", "correct");
}else{
io.sockets.emit("passwordFeedback", "wrong");
}
})
password1
它应该是第一个用户插入的密码。password
它应该是第二个用户插入的密码。如果我存储了第一个密码(应该存储该密码,然后将其与第二个用户输入的密码进行比较),它将失败,只需存储当前用户连接即可。
客户端:
//Join private room
socket.emit("checkPassword", { username, room, password });
socket.on("passwordFeedback", function (flag) {
if (flag == "correct") {
console.log('password match')
}else{
console.log('password didnt match')
alert("Incorrect Password!");
}
});
感谢您的帮助。
这对我有用。
服务器:
let rooms = {}
io.of('/test').on('connection', (socket) => {
console.log('Connected', socket.id);
socket.on("joinRoom", ({ username, room, password }) => {
let isEntryAvailable = userJoin(socket.id, username, room, password);
if (isEntryAvailable) {
socket.emit('passwordFeedback', 'correct')
} else {
socket.emit('passwordFeedback', 'wrong')
}
})
socket.on('disconnect', () => {
io.of('/test').emit('message', 'user disconnected '+ socket.id);
if (rooms[rooms[socket.id]] && Object.keys(rooms[rooms[socket.id]]).length == 2) {
delete rooms[rooms[socket.id]];
} else {
if (rooms[rooms[socket.id]] && rooms[rooms[socket.id]][socket.id]) {
delete rooms[rooms[socket.id]][socket.id];
}
}
delete rooms[socket.id];
console.log('Disonnected', socket.id);
console.log(rooms);
})
function userJoin (socketId, username, room, password) {
if (!rooms[room] || (rooms[room] && !rooms[room].password)) {
if (!rooms[room]) {
rooms[room] = {};
}
rooms[room].password = password;
rooms[room][socketId] = username;
rooms[socketId] = room;
return true;
} else {
if (rooms[room].password == password) {
rooms[socketId] = room;
rooms[room][socketId] = username;
socket.join(room);
return true;
} else {
return false;
}
}
}
})
客户:
const socket = io('http://localhost:3000/test');
socket.on('connect', () => {
console.log('Connected', socket.id);
socket.emit('joinRoom', { room: 'room0', username: 'name1', password: 'pass@1234' });
})
socket.on('passwordFeedback', (data) => {
console.log(data);
})
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句