如果别人知道服务器端口,直接 connect(“ws://host:port”) 连接 这样别人就可以随便发消息了
我的想法是 自己设计一种算法生成一个tokon 在授权的地方,加上这个token,然后在onconnect的时候判断这个token, 但是 connect貌似没法发送token 只能 connect send(token); emit("chanel",msg);
这样服务器还是会被连上,只能发消息的时候才能验证token 有没有其他好的办法?
5 回复
connect函数支持两个参数,第二个参数是一个可选options对象 里面可以加个query属性 connect(‘host’,{ query:’user=xxx&type=xxx&secret=xxxx’ });
我是用session判断的
io.use(function(socket, next) {
var handshake = socket.handshake;
if (handshake.headers.cookie) {
cookieParser(config.secret)(handshake, {}, function(err) {
handshake.sessionID = handshake.signedCookies['connect.sid']; // <- 'connect.sid' > your key could be different, but this is the default
handshake.sessionStore = sessionStore;
handshake.sessionStore.get(handshake.sessionID, function(err, data) {
if (err) return next(err);
if (!data) return next(new Error('Invalid Session'));
handshake.session = new session.Session(handshake, data);
next();
});
});
} else {
next(new Error('Missing Cookies'));
}
});