2014-04-09 24 views
3

Node.js由提供的認證的示例使用下面的代碼段:在cookie解析器和會話中存儲的secret set是否與express.js中的相同?

app.use(express.cookieParser('shhhh, very secret')); 
app.use(express.session()); 

然而,express.js會話的documentation使用以下:

app.use(cookieParser()) 
app.use(session({ secret: 'keyboard cat', key: 'sid', cookie: { secure: true }})) 

這是令人困惑的。兩個祕密都一樣嗎?如果我將會話存儲在數據庫中,應該使用哪種方法?

回答

2

Express 3.5.x版本仍然應該使用基於connect module的一些庫連接。

的cookieParser中間件

connect() 
    .use(connect.cookieParser('optional secret string')) 
    .use(function(req, res, next){ 
    res.end(JSON.stringify(req.cookies)); 
    }) 

的Nex有它在默認情況下,如果你想擴展您的應用程序中使用的Redis,Mongo的或任何其他數據庫存儲器使用的內存存儲,會話中間件:

connect() 
    .use(connect.cookieParser()) 
    .use(connect.session({ secret: 'keyboard cat', key: 'sid', cookie: { secure: true }})) 

閱讀有關connect會話中間件的更多信息,有兩條線可以回答您的問題。 (http://www.senchalabs.org/connect/session.html

// backwards compatibility for signed cookies 
// req.secret is passed from the cookie parser middleware 
var secret = options.secret || req.secret; 

// ensure secret is available or bail 
if (!secret) throw new Error('`secret` option required for sessions'); 

祕密會話cookie用這個祕密簽名以防止篡改。所以基本上這些都是一樣的,但是當你添加會話支持時,請刪除cookieParser中的選項並僅使用會話中間件中的選項設置。

也請注意Express 4.x版本帶來了一些中間件更改!

相關問題