socket.io怎么处理授权的问题
发布于 10 年前 作者 yakczh 5677 次浏览 最后一次编辑是 8 年前 来自 问答

如果别人知道服务器端口,直接 connect(“ws://host:port”) 连接 这样别人就可以随便发消息了

我的想法是 自己设计一种算法生成一个tokon 在授权的地方,加上这个token,然后在onconnect的时候判断这个token, 但是 connect貌似没法发送token 只能 connect send(token); emit(“chanel”,msg);

这样服务器还是会被连上,只能发消息的时候才能验证token 有没有其他好的办法?

4 回复

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'));
    }
});
回到顶部