如何使用nodejs和socket.io在聊天室中验证密码功能

塞巴斯蒂安

我正在尝试验证聊天室的密码,但是当第二个用户进入时,它使我复杂了。应该由第一个用户定义密码,但是当第二个用户输入时,我无法保留第一个密码。

我在服务器端有这个:

//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!");
    }
  });

感谢您的帮助。

阿比舍克·潘卡尔(Abhishek Pankar)

这对我有用。

服务器:

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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

每个聊天室javascript的socket.io端口

来自分类Dev

Linux中C / Socket编程中的聊天室

来自分类Dev

如何通过Rest API在ejabberd中创建聊天室?

来自分类Dev

如何在聊天室中添加表情符号?

来自分类Dev

如何在聊天室中添加表情符号?

来自分类Dev

如何通过Rest API在ejabberd中创建聊天室?

来自分类Dev

如何使用Quickblox聊天室进行1:1聊天?

来自分类Dev

如何在AppleScript中使用javascript返回聊天室中的用户列表

来自分类Dev

NodeJS使用setInterval作为聊天室计时器

来自分类Dev

Android quickblox如果用户不在聊天室中如何接收消息

来自分类Dev

XMPPFarmework如何在iOS中获取XMPP聊天室列表?

来自分类Dev

如何在一个 CollectionViewController 中查看我的所有聊天室?

来自分类Dev

如何最好地检索网络版 Firebase 中给定聊天室的所有评论?

来自分类Dev

使用基于Twisted的套接字限制聊天室中的用户数量

来自分类Dev

可扩展的聊天室使用(playframework akka和websocket)

来自分类Dev

如何使用套接字IO检查有多少参与者连接到我的聊天室

来自分类Dev

如何使用sockjs建立私人聊天室?

来自分类Dev

如何使用sockjs建立私人聊天室?

来自分类Dev

使用Socket.IO和NodeJS实现音频聊天

来自分类Dev

nodejs聊天室对象预期第一行

来自分类Dev

如何使用smack-android:4.1.4在多用户聊天室中取消禁止用户

来自分类Dev

支持多个虚拟聊天室(例如,使用NServiceBus)

来自分类Dev

linphone在聊天室中使用SIP消息发送消息

来自分类Dev

无法使用asmack获得已加入的聊天室

来自分类Dev

使用API打开聊天室-Scringo Android

来自分类Dev

使用 Firebase 将用户转发到特定聊天室

来自分类Dev

名册组和Smack中的多用户聊天室(XMPP库)有什么区别?

来自分类Dev

创建Java中的自定义聊天室服务器类和客户端类

来自分类Dev

RTCMultiConnection V3.0如何在一个页面中添加多个聊天室

Related 相关文章

  1. 1

    每个聊天室javascript的socket.io端口

  2. 2

    Linux中C / Socket编程中的聊天室

  3. 3

    如何通过Rest API在ejabberd中创建聊天室?

  4. 4

    如何在聊天室中添加表情符号?

  5. 5

    如何在聊天室中添加表情符号?

  6. 6

    如何通过Rest API在ejabberd中创建聊天室?

  7. 7

    如何使用Quickblox聊天室进行1:1聊天?

  8. 8

    如何在AppleScript中使用javascript返回聊天室中的用户列表

  9. 9

    NodeJS使用setInterval作为聊天室计时器

  10. 10

    Android quickblox如果用户不在聊天室中如何接收消息

  11. 11

    XMPPFarmework如何在iOS中获取XMPP聊天室列表?

  12. 12

    如何在一个 CollectionViewController 中查看我的所有聊天室?

  13. 13

    如何最好地检索网络版 Firebase 中给定聊天室的所有评论?

  14. 14

    使用基于Twisted的套接字限制聊天室中的用户数量

  15. 15

    可扩展的聊天室使用(playframework akka和websocket)

  16. 16

    如何使用套接字IO检查有多少参与者连接到我的聊天室

  17. 17

    如何使用sockjs建立私人聊天室?

  18. 18

    如何使用sockjs建立私人聊天室?

  19. 19

    使用Socket.IO和NodeJS实现音频聊天

  20. 20

    nodejs聊天室对象预期第一行

  21. 21

    如何使用smack-android:4.1.4在多用户聊天室中取消禁止用户

  22. 22

    支持多个虚拟聊天室(例如,使用NServiceBus)

  23. 23

    linphone在聊天室中使用SIP消息发送消息

  24. 24

    无法使用asmack获得已加入的聊天室

  25. 25

    使用API打开聊天室-Scringo Android

  26. 26

    使用 Firebase 将用户转发到特定聊天室

  27. 27

    名册组和Smack中的多用户聊天室(XMPP库)有什么区别?

  28. 28

    创建Java中的自定义聊天室服务器类和客户端类

  29. 29

    RTCMultiConnection V3.0如何在一个页面中添加多个聊天室

热门标签

归档