Session not storing in Express for Node.js -
i have following route acts on post login form. problem when login success (member found , passwords match), member._id not stored in session.
my route:
app.post('/signin', function(req, res) { member.findone({username: req.body.username}, function(error, member) { var matchpassword = crypto.createhmac('sha1', member.salt).update(req.body.password).digest('hex'); if(member.password == matchpassword) { req.session.member_id = member._id; res.redirect('/' + member.username); } }); res.redirect('/'); }); i following error in console when route fired:
node.js:134 throw e; // process.nexttick error, or 'error' event on first tick ^ error: can't set headers after sent. @ serverresponse.<anonymous> (http.js:527:11) @ serverresponse.setheader (/users/admin/node projects/sandboxproject/node_modules/express/node_modules/connect/lib/patch.js:62:20) @ serverresponse.header (/users/admin/node projects/sandboxproject/node_modules/express/lib/response.js:280:8) @ serverresponse.redirect (/users/admin/node projects/sandboxproject/node_modules/express/lib/response.js:413:10) @ promise.<anonymous> (/users/admin/node projects/sandboxproject/app.js:109:8) @ promise.<anonymous> (/users/admin/node projects/sandboxproject/node_modules/mongoose/lib/promise.js:120:8) @ promise.<anonymous> (events.js:64:17) @ promise.emit (/users/admin/node projects/sandboxproject/node_modules/mongoose/lib/promise.js:59:38) @ promise.complete (/users/admin/node projects/sandboxproject/node_modules/mongoose/lib/promise.js:70:20) @ /users/admin/node projects/sandboxproject/node_modules/mongoose/lib/query.js:1087:15 it seem didn't "res.redirect('/' + member.username);" after "req.session.member_id = member._id;". because of asynchronous nature of mongoose findone callback it's in? i've tried removing res.redirect callback session data not stored , when leave in there, "headers sent" error.
my configuration:
app.configure(function(){ app.set('views', __dirname + '/views'); app.set('view engine', 'jade'); app.use(express.cookieparser()); app.use(express.session({ secret: "blahblah" })); app.use(express.bodyparser()); app.use(express.methodoverride()); app.use(app.router); app.use(express.static(__dirname + '/public')); });
i had similar problem. although problem when deleted session, e.g. delete req.session.user, still there after reloads , node app restarts. gone after req.session.destroy().
i looked @ node's session middleware docs , found have session#save() method. did req.session.save() after session object manipulations , did fix problem. try , see if fixes yours.
Comments
Post a Comment