express+socket.io,如何限制一个用户只能登录一次,一个用户只有一个连接到socket.io
服务端代码,有一个问题
handshakeData.username = username;
这个好像不起作用
var connectedUsers = [];
io.set('authorization', function (handshakeData, callback) {
var signedCookies = require('express/node_modules/cookie').parse(handshakeData.headers.cookie);
handshakeData.cookies = require('express/node_modules/connect/lib/utils').parseSignedCookies(signedCookies, settings.cookie_secret);
sessionStore.get(handshakeData.cookies['connect.sid'], function(err, session) {
if (err) {
callback(err, false);
return;
}
var username = session.user && session.user.name;
handshakeData.username = username; //这个好像不起作用
console.log('authorization', username);
console.dir(connectedUsers);
if (connectedUsers.indexOf(username) !== -1) {
//重复登录
console.log('重复登录');
callback('重复登录', false);
} else {
connectedUsers.push(username);
callback(null, true);
}
});
//callback(null, false);
});
io.of('/client').on('connection', function (socket) {
socket.emit('agents', agents);
socket.emit('rate', rate);
//socket.handshake.username
console.log('client connect:', socket.client.request.username);
//client下线
socket.on('disconnect', function() {
console.log('disconnect', socket.client.request.username);//socket.handshake.username);
connectedUsers.splice(connectedUsers.indexOf(socket.client.request.username), 1);
});
});
客户端代码
var client = io.connect('/client');
// 下面代码参考官方文档,但没有收到连接失败端消息,请大家指正
client.on('connect_failed', function (reason) {
console.log('unable to connect to namespace', reason);
});
4 回复
请问你解决这个问题了吗? 我现在遇到session问题了,sokcet.io中的session好像与http中获取的req.session不一致
利用session来记录登录用户 已经登录的用户不让登录就行了 不过问题是socket.io中如何获取session啊 我和你遇到同样的问题了 不过我解决了重复登录问题 但是还没解决在socket.io中获取session的问题 望交流下 速回复我
@ddzjs 我上面到代码就可以获取session了, 我测试是,必须调用: io.set(‘authorization’, function (handshakeData, callback) {
@zemug 这个问题我早就解决了,我的和你的代码有点不一样