connect-mongo github:
https://github.com/kcbanner/connect-mongo該模塊用于將session存入mongo中
使用session希望達到以下兩個目的:
1、對于未登陸的用戶跳至某些頁面進行攔截 2、跳轉某些頁面需帶有用戶信息。
環境配置:
版本Express4.x 、Connect 3.x
需要通過npm額外引入的與cookie、session相關的模塊有:
"connect":"3.4.1",
"connect-mongo":"1.1.0",
"express-session":"1.13.0",
"cookie-parser":"1.4.1",
"body-parser":"1.14.2",
使用方法:
建立項目時選用了Mongoose模塊操作數據庫mongodb,所以在connect-mongo中選用了Re-use a Mongoose connection的方式
app.js 中涉及到的相關代碼:
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
})
}));
到這里基本設置就完成了,接下來我們要做的是
1、在登錄的時候將session存入數據庫;
2、根據session進行頁面攔截。
登錄存入session:
當登錄的用戶名和密碼進行驗證之后,執行如下代碼:
req.session.user = {
'username':User.username,
'chatNumber':User.chatNumber,
'userimg':User.userimg
}//User為存入數據庫回調回來的用戶對象
此時數據庫中會有sessions的集合,我們也可在全局取得req.session.user,這樣每進入一個需要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將不會被存入。
以上代碼是涉及到的部分代碼,若有詞不達意、錯誤地方還請多多指教