connect-mongo github:
https://github.com/kcbanner/connect-mongo該模塊用于將session存入mongo中
使用session希望達(dá)到以下兩個目的:
1薄货、對于未登陸的用戶跳至某些頁面進(jìn)行攔截 2传于、跳轉(zhuǎn)某些頁面需帶有用戶信息。
環(huán)境配置:
版本Express4.x 、Connect 3.x
需要通過npm額外引入的與cookie概行、session相關(guān)的模塊有:
"connect":"3.4.1",
"connect-mongo":"1.1.0",
"express-session":"1.13.0",
"cookie-parser":"1.4.1",
"body-parser":"1.14.2",
使用方法:
建立項(xiàng)目時選用了Mongoose模塊操作數(shù)據(jù)庫mongodb,所以在connect-mongo中選用了Re-use a Mongoose connection的方式
app.js 中涉及到的相關(guān)代碼:
var mongoose = require('mongoose'),
dbUrl ='mongodb://@localhost:27017/mongodbtest',
session = require('express-session'),
connect = require('connect'),
MongoStore = require('connect-mongo')(session),
cookieParser = require('cookie-parser'),
bodyParser = require('body-parser');
app.use(session({
store: new MongoStore({
url: dbUrl,
ttl: 14 * 24 * 60 * 60 // = 14 days. Default
})
}));
到這里基本設(shè)置就完成了逊脯,接下來我們要做的是
1韧献、在登錄的時候?qū)ession存入數(shù)據(jù)庫;
2组去、根據(jù)session進(jìn)行頁面攔截鞍陨。
登錄存入session:
當(dāng)?shù)卿浀挠脩裘兔艽a進(jìn)行驗(yàn)證之后,執(zhí)行如下代碼:
req.session.user = {
'username':User.username,
'chatNumber':User.chatNumber,
'userimg':User.userimg
}//User為存入數(shù)據(jù)庫回調(diào)回來的用戶對象
此時數(shù)據(jù)庫中會有sessions的集合从隆,我們也可在全局取得req.session.user,這樣每進(jìn)入一個需要user對象信息的頁面時就可以通過session將用戶信息傳入頁面诚撵。
session攔截:
在app.js中插入如下代碼:
app.use(function (req, res, next) {
var url = req.originalUrl;//獲取url
if(!req.session.user&&url != "/login"&&url != "/register"&&url != "/postLogin"){
return res.redirect("/login");
}
next();
});
以上除了注冊登錄頁面,其余頁面在未登錄情況下將都被攔截键闺,postLogin為登錄過程中提交的地址寿烟,不能被攔截,否則cookie將不會被存入辛燥。
以上代碼是涉及到的部分代碼筛武,若有詞不達(dá)意、錯誤地方還請多多指教