fixing login and logout sessions

v1.18.x
Julian Lam 13 years ago
parent b0e510c862
commit 19cd9e05ed

@ -30,8 +30,7 @@
jQuery('#error').show(50); jQuery('#error').show(50);
jQuery('#error p').html(data.message); jQuery('#error p').html(data.message);
} else { } else {
jQuery('#error').hide(50); document.location.href = '/';
ajaxify.go('/');
} }
}); });
}()); }());

@ -33,25 +33,17 @@ var config = require('../config.js'),
global.uid = uid; global.uid = uid;
global.socket.emit('event:alert', {
title: 'Welcome ' + user.username,
message: 'You have successfully logged in.',
type: 'notify',
timeout: 2000
});
return global.socket.emit('user.login', {'status': 1, 'message': 'Logged in!'}); return global.socket.emit('user.login', {'status': 1, 'message': 'Logged in!'});
} }
}); });
}); });
}; };
User.logout = function(callback) { User.logout = function(sessionID, callback) {
RDB.get('uid:' + global.uid + ':session', function(sessionID) { User.get_uid_by_session(sessionID, function(uid) {
if (sessionID) { if (uid) {
RDB.del('sess:' + sessionID + ':uid'); RDB.del('sess:' + sessionID + ':uid');
RDB.del('uid:' + global.uid + ':session'); RDB.del('uid:' + uid + ':session');
global.uid = null;
callback(true); callback(true);
} else callback(false); } else callback(false);
}); });
@ -236,32 +228,36 @@ var config = require('../config.js'),
}, },
keys = []; keys = [];
for(var a in active) { if (active.length > 0) {
keys.push('sess:' + active[a].split(':')[1] + ':uid'); for(var a in active) {
} keys.push('sess:' + active[a].split(':')[1] + ':uid');
}
RDB.mget(keys, function(uids) { RDB.mget(keys, function(uids) {
for(var u in uids) { for(var u in uids) {
if (uids[u] !== null) { if (uids[u] !== null) {
if (returnObj.uids.indexOf(uids[u]) === -1) { if (returnObj.uids.indexOf(uids[u]) === -1) {
returnObj.users++; returnObj.users++;
returnObj.uids.push(uids[u]); returnObj.uids.push(uids[u]);
}
} else {
returnObj.anon++;
} }
} else {
returnObj.anon++;
} }
}
if (callback === undefined) { if (callback === undefined) {
global.socket.emit('api:user.active.get', returnObj) global.socket.emit('api:user.active.get', returnObj)
} else { } else {
callback(returnObj); callback(returnObj);
} }
}); });
} else {
global.socket.emit('api:user.active.get', returnObj)
}
}); });
}, },
register: function(sessionID) { register: function(sessionID) {
RDB.set('active:' + sessionID, 60*10); // Active state persists for 10 minutes RDB.set('active:' + sessionID, '', 60*10); // Active state persists for 10 minutes
} }
} }
}(exports)); }(exports));

@ -36,18 +36,33 @@ var express = require('express'),
key: 'express.sid' key: 'express.sid'
})); }));
app.use(function(req, res, next) { app.use(function(req, res, next) {
if (global.uid === undefined) { var hasExtension = /\.[\w]{2,4}$/;
console.log('info: [Auth] First load, retrieving uid...'); if (!hasExtension.test(req.url.indexOf('?') !== -1 ? req.url.substr(0, req.url.indexOf('?')) : req.url)) {
global.modules.user.get_uid_by_session(req.sessionID, function(uid) { console.log('REQUESTING: ' + req.url);
global.uid = uid; if (req.session.uid === undefined) {
if (global.uid !== null) console.log('info: [Auth] uid ' + global.uid + ' found. Welcome back.'); console.log('info: [Auth] First load, retrieving uid...');
else console.log('info: [Auth] No login session found.'); global.modules.user.get_uid_by_session(req.sessionID, function(uid) {
}); if (uid !== null) {
req.session.uid = uid;
global.socket.emit('event:alert', {
title: 'Welcome ' + user.username,
message: 'You have successfully logged in.',
type: 'notify',
timeout: 2000
});
} else req.session.uid = 0;
if (req.session.uid) console.log('info: [Auth] uid ' + req.session.uid + ' found. Welcome back.');
else console.log('info: [Auth] No login session found.');
});
} else {
// console.log('SESSION: ' + req.sessionID);
// console.log('info: [Auth] Ping from uid ' + req.session.uid);
}
// (Re-)register the session as active // (Re-)register the session as active
global.modules.user.active.register(req.sessionID); global.modules.user.active.register(req.sessionID);
} else {
console.log('info: [Auth] Ping from uid ' + global.uid);
} }
next(); next();
@ -85,6 +100,7 @@ var express = require('express'),
break; break;
default : default :
res.send('{}'); res.send('{}');
break;
} }
}); });
@ -94,8 +110,11 @@ var express = require('express'),
app.get('/logout', function(req, res) { app.get('/logout', function(req, res) {
console.log('info: [Auth] Session ' + res.sessionID + ' logout (uid: ' + global.uid + ')'); console.log('info: [Auth] Session ' + res.sessionID + ' logout (uid: ' + global.uid + ')');
global.modules.user.logout(function(logout) { global.modules.user.logout(req.sessionID, function(logout) {
if (logout === true) req.session.destroy(); if (logout === true) {
delete(req.session.uid);
req.session.destroy();
}
}); });
res.send(templates['header'] + templates['logout'] + templates['footer']); res.send(templates['header'] + templates['logout'] + templates['footer']);
@ -125,7 +144,7 @@ var express = require('express'),
module.exports.init = function() { module.exports.init = function() {
// todo move some of this stuff into config.json // todo move some of this stuff into config.json
app.configure(function() { app.configure(function() {
app.use(express.static(global.configuration.ROOT_DIRECTORY + '/public')); app.use(express.static(global.configuration.ROOT_DIRECTORY + '/public'));
}); });
} }
}(WebServer)); }(WebServer));

Loading…
Cancel
Save