Разбираю куку. Получаю id сессии, сохраняю его в sid, который передается в loadSession, с помощью которого нахожу нужную сессию. Эта сессия передается в loadUser, который с помощью findById находит нужного юзера, которого сохраняю в handshake.user . Но в дальнейшем в io.sockets при обращении к handshake.user, выдает ошибку: "TypeError: Cannot read property 'get' of undefined". По какой то причине handshake.user не виден в io.sockets. Не могу понять почему. Помогите пжлста.
module.exports = function (server) {
var io = require('socket.io').listen(server);
io.set('origins', 'localhost:*');
// io.set('logger', log);
io.set('authorization', function (handshake, callback) {
async.waterfall([
function (callback) {
// сделать handshakeData.cookie - обьектом с cookie
handshake.cookies = cookie.parse(handshake.headers.cookie || '');
var sidCookie = handshake.cookies[config.get('session:key')];
var sid = cookieParser.signedCookie(sidCookie, config.get('session:secret'));
loadSession(sid, callback);
},
function (session, callback) {
if (!session) {
callback(new HttpError(401, 'No session'));
}
handshake.session = session;
loadUser(session, callback);
},
function (user, callback) {
if (!user) {
callback(new HttpError(403, 'Anonymous session may not connect'));
}
// сохраняю юзера
handshake.user = user;
callback(null);
}
], function (err) {
if (!err) {
return callback(null, true);
}
if (err instanceof HttpError) {
return callback(null, false);
}
callback(err);
});
});
function loadSession(sid, callback) {
sessionStore.get(sid, function (err, session) {
if(arguments.length == 0) {
// no arguments => no session
return callback(null, null);
} else {
return callback(null, session);
}
});
}
function loadUser(session, callback) {
if (!session.user) {
log.debug('Session %s is anonymous', session.id);
return callback(null, null);
}
log.debug('retrieving user ', session.user);
User.findById(session.user, function (err, user) {
if (err) return callback(err);
if (!user) {
return callback(null, null);
}
log.debug('user findbyid result: ' + user);
callback(null, user);
});
}
io.sockets.on('connection', function (socket) {
// обращение к сохраненному юзеру
var username = socket.handshake.user.get('username');
socket.broadcast.emit('join', username);
io.on('message', function (text, cb) {
socket.broadcast.emit('message', username, text);
cb && cb();
});
io.on('disconnect', function () {
socket.broadcast.emit('leave', username);
});
});