具有自定义sessionID错误的node.js Express 4 Session

我试图从我的mongo数据库中使用会话ID作为express-session中的sessionID,并将这些详细信息存储在connect-redis会话存储中。

我一直得到'TypeError:需要Cookie'

这似乎是一个错误,但有人可以检查我的逻辑在这里,请:

我已经将代码剥离到它的骨头,并删除了不需要的任何东西来创build问题。

'use strict'; var express = require('express'), session = require('express-session'), redisStore = require('connect-redis')(session), bodyParser = require('body-parser'), app = express(); app.use(session({ name: 'test', genid: function(req) { if (typeof req.sessionID != 'undefined') return req.sessionID; }, cookie: { httpOnly: false, path: '/', maxAge: null }, resave: false, saveUninitialized: false, secret: 'finbarboobar', store: new redisStore({ host: 'localhost', port: 6379, prefix: 'kTest:' }) })); app.use(bodyParser.urlencoded({ extended: false })); //router app.route(['/']) .get(function(req, res) { if (req.session.email) return res.redirect('/admin'); res.send('<h1>Login</h1><form action="/login" method="POST" accept-charset="UTF-8" ><input placeholder="Enter Email" name="email" type="email" autofocus="autofocus"><input type="submit" value="sign in"></form>'); }); app.route(['/login']) .post(function(req, res) { req.sessionID = 1; req.session.regenerate(function(error) { if (error) { console.log(error); } else { req.session.email = req.body.email; res.redirect('/admin'); } }); }); app.get('/admin', function(req, res) { if (req.session.email) { res.send('<h1>Hello ' + req.session.email + '</h1><a href="/logout">logout</a>'); } else { res.redirect('/'); } }); app.get('/logout', function(req, res) { req.session.destroy(function(error) { if (error) { console.log(error); } else { res.redirect('/'); } }) }); app.listen(3001); 

感谢您看这个。

这里的问题是在github上已经提到的express-session包中的一个bug

问题是req.sessionID需要是一个string 。 所以在上面的例子中,我发送了一个数字,并在我的原始代码中发送了一个mongoDB._id对象。

上述解决scheme将使用:

 req.sessionID = "1"; 

真正问题的解决办法是使用:

 req.sessionID = mongoDBSession._id.toString(); 

我希望这可以帮助别人解决这些问题。