2014-12-02 73 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(); 

我希望這可以幫助別人這些問題在有一點。