Open ghost opened 12 years ago
Using v0.8.1
Can anyone confirm this issue, or am I doing something wrong? Thanks.
I'm experiencing this as well. If I figure out a fix, I'll post it here. I'm suspecting something to do with the order in which middleware is declared.
I haven't identified the real root cause, but I've isolated the issue to static routing:
app.use(express.static(__dirname + '/public'));
This seemed to prevent session functionality regardless of when it was loaded. I was able to sidestep the issue by using routes instead and disabling the static handler. I'd love to have a better fix, though.
lukifer, thanks for looking at this. For me, disabling static routing has no effect -- nowjs.sessions and this.user.session remain empty. Below is the block of code I use to create the Express server. I've tried disabling static routing, methodOverride(), and responseTime() but none of these had any effect.
var express = require('express'); var app = module.exports = express.createServer(); app.configure(function() { app.set('views', dirname + '/views'); app.set('view engine', 'eco'); app.set('view options', {layout: false}); app.use(express.bodyParser({ uploadDir: '/tmp/node', keepExtensions: false })); app.use(express.methodOverride()); app.use(express.cookieParser()); app.use(express.session({ secret: '****', store: sessionStore })); app.use(express.responseTime()); app.use(express.static(dirname + '/public')); app.use(app.router); });
var nowjs = require('now'); var everyone = nowjs.initialize(app, { cookieKey: 'connect.sid' });
Here is a fix which works for me:
Setup your sessionstore:
// use redis as session middleware sessionStore = new RedisStore({'db':'1', maxAge: 1209600000});
nowjs.sessions(sessionStore); nowjs.sessionStore = sessionStore;
Modify the user now user module:
now/lib/user.js
Replace this:
// Populate session by parsing cookie var cookie = this.user.cookie[nowjs.options['cookieKey']]; if (cookie) { this.user.session = nowjs.sessions[unescape(cookie)]; }
With this:
var sid = decodeURIComponent(this.user.cookie['connect.sid']); if (sid) { var self = this; nowjs.sessionStore.get(sid, function (err, session) { self.user.session = session; return; }); }
You should now have session info in your user object.
I'm using Express sessions, and can read session data from req.session in the Express application object. However, I'm not able to read data from this.user.session because nowjs.sessions is never populated. The callback function in this block of code in now.js (starting line 210) never seems to get invoked:
See issue #175 which may be related / identical. Thanks.