2012-11-19 48 views
0

閱讀這是我的設置:req.signedCookies沒有在expressJS

express.js版本「: 」3.0.0rc2「

app.js

... 
app.use(express.cookieParser('secret')); 
app.use(express.session({secret: 'secret'})); 
app.use(app.router); 
... 

然後設置簽署cookie和重定向:
res.cookie('session', cookie_value, {signed: true}); res.redirect('/else_where');

然後檢索簽署的cookie:
var cookie = req.signedCookies.session;

console.log('get cookie: ' + req.cookies.session); 
console.log('get signed cookie: ' + req.signedCookies.session); 

的問題是,Cookie是undefined已簽名的cookie和正常工作與req.cookies.session

由於某種原因,我沒有播放cookie的簽名。
不知道發生了什麼事。
我的app.use()的順序是否正確佈置?

與此類似this

UPDATE_02
我實現了一個簡單的res/req已簽署的cookie,像這樣:

app.configure(function(){ 
    app.set('port', process.env.PORT || 3000); 
    app.set('views', __dirname + '/views'); 
    app.set('view engine', 'jade'); 
    app.use(express.favicon()); 
    app.use(express.logger('dev')); 
    app.use(express.cookieParser('secret')); 
    app.use(express.bodyParser()); 
    app.use(express.methodOverride()); 
    app.use(expressValidator); 
    app.use(express.session()); 
    app.use(app.router); 
    app.use(express.static(path.join(__dirname, 'public'))); 
}); 

app.get('/', function(req, res) { 
    if (!req.signedCookies.cat) { 
    res.cookie('cat', 'boo', {signed: true}); 
    console.log('setting cookie'); 
    res.writeHead(200, {'Content-Type':'text/plain'}); 
    return res.end('cookie set'); 
    } 

    res.end('signed cookie: ' + req.signedCookies.cat); 
}); 

當我使用的瀏覽器打localhost:3000我得到的第一所期望的響應cookie set
我檢查瀏覽器cookies並設置了cookie。
當我使用相同的瀏覽器再次點擊localhost:3000時,我得到了相同的響應'cookie集'。
該請求似乎無法從cookie中獲取。

因此,在另一個文件中,我複製/粘貼上面的代碼並切換到3080
當通過第二個響應產生`signed cookie:boo'時。

然後,如果我刷新localhost:3000的迴應是signed cookie: boo
這是爲什麼發生?是否有緩存繼續這不應該?
任何幫助表示讚賞。

UPDATE_01
即使我做了req.signedCookies.session立即設置cookie後,我回去undefined。該cookie確實得到簽名,因爲有一個額外的.後跟一堆隨機字母和數字。它沒有被分配到req.signedCookies

回答

1

該Cookie的瀏覽器是:
boo.o5SqHrxUOZkyNLdIBqIZrfog6jXYJkP78M99IMbrnDA

通過更新來表達3.0。3 cookie變成: s:boo.o5SqHrxUOZkyNLdIBqIZrfog6jXYJkP78M99IMbrnDA

更新後問題得到修復。