Подскажите пожалуйста как правильно работать с сессиями в NODEJS, и почему sid - undefined?
var async = require('async');
var cookie = require('cookie');
var cookieParser = require('cookie-parser');
var log = require('../libs/log')(module); // winston
var config = require('../config/index');
var HttpError = require('../errors/index').HttpError;
var sessionStore = require('../libs/sessionStore');
var User = require('../models/user').User;
function loadSession(sid, callback) {
sessionStore.load(sid, function(err, session) {
if (arguments.length == 0) {
return callback(null, null);
} else {
return callback(null, session);
}
});
}
function loadUser(session, callback) {
if (!session.user) {
log.debug("Session %s is anonimous", 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("Results: " + user);
callback(null, user);
});
}
module.exports = function(server) {
var io = require('socket.io')(server);
io.use(function(socket, next) { // authorization
var handshakeData = socket.request;
var secret = config.get('session:secret');
var sessionKey = config.get('session:key');
async.waterfall([
function (callback) {
var parser = cookieParser(secret);
parser(handshakeData, {}, function (err) {
if (err) return callback(err);
console.log(socket.handshake.headers.cookie); // OK
var sid = handshakeData.signedCookies[sessionKey];
console.log(secret); // OK
console.log(sessionKey); // OK
console.log(sid); // undefined
loadSession(sid, callback);
});
},
function(session, callback) {
if (!session) {
callback(new HttpError(401, "No session"));
}
socket.handshake.session = session;
loadUser(session, callback);
},
function(user, callback) {
if (!user) {
callback(new HttpError(403, "Anonimous session may not connect"));
}
socket.handshake.user = user;
callback(null);
}
], function(err) {
if (!err) {
return next(null, true);
}
if (err instanceof HttpError) {
return next(null, false);
}
next(err);
});
});
io.on('connection', function(socket) {
...
}
return io;
}