仅当在连接上收到特定消息时,服务器如何才能对客户端进行身份验证?

时间:2019-05-08 13:41:17

标签: javascript websocket socket.io

我想问你一个关于JavaScript套接字所面临的问题。 我希望服务器仅在接收到特定消息时才允许与客户端连接。

例如,服务器等待消息“ confirmed_user”以允许套接字连接。其他任何东西都必须被拒绝,服务器必须断开()连接。

我的客户端:

var express = require('express')
var app = express();
var http = require('http')
var server = http.createServer(app)

const io = require('socket.io-client');


//CASE 1 client send the message "confirmed_user"
socket = io.connect("http://localhost:3333/").emit('set', "confirmed_user", 
  function (response) {console.log(response);
                      });

//CASE 2 client send the message "blabla"
/* socket = io.connect("http://localhost:3333/").emit('set', "blabla", 
  function (response) {console.log(response);
                      });*/

//CASE 3 client don't send any message
/*socket = io.connect("http://localhost:3333/",
function (response) {console.log(response);             });*/

服务器端...

 io.on('connection', function (socket) {
      socket.on('set', function (status, callback) {
           if(status=='confirmed_user') {
            console.log("new client connected!");
               //server stuff | server stuff
            socket.on('disconnect', function() {
              console.log("a client disconnected");
                                               }
              }
          else{
              console.log("not authenticated USER")
              socket.disconnect()
              }
      });
   });

如果客户端发送任何消息(情况1和情况2),则上述方法可行,我唯一的问题是,如果客户端没有发送套接字客户端未断开连接的消息(情况3)(客户端没有访问权限到“服务器资料”,但连接仍然打开)。如果在此示例中客户端未在连接上发送任何消息,服务器还如何终止连接?谢谢

1 个答案:

答案 0 :(得分:0)

socket = io.connect("http://localhost:3333/","",
function (response) {console.log(response);             });

出于好奇,这样的事情行得通吗?如果第二个参数期望用户输入的是字符串,则将该字符串设置为空值将与用户通过聊天不发送任何内容相同。