2014-12-02 79 views
2

我试图从我的mongo数据库中使用会话ID作为会话ID在快速会话内,并具有这些细节存储在connect-redis会话存储。node.js Express 4会话与自定义会话ID错误

我不断收到“类型错误:所需的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

这里的问题是它已经在github

解决的问题明确会话包中的一个错误是,req.sessionID必须是string。所以在上面的例子中,我发送了一个数字,在我的原始代码中,我发送了一个mongoDB._id对象。

的解决了以上是使用:

req.sessionID = "1"; 

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

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

我希望这可以帮助别人这些问题在有一点。