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

时间:2014-12-02 13:21:02

标签: node.js session express

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

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

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

我已经删除了代码,并删除了创建问题所不需要的任何内容。

'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);

感谢您查看此内容。

1 个答案:

答案 0 :(得分:1)

此处的问题是快递会话包中的错误,已在github

上解决

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

上述解决方案是使用:

req.sessionID = "1";

真正问题的解决方案是使用:

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

我希望这会在某些时候帮助其他人解决这些问题。