22.設置攔截
只有登錄才能進入到后台頁面,不登錄無法進入
如果登陸成功, 寫入session, 參數 uid uid=123dsfjksldfjsl
檢測登陸, 請求中 session 是否包含 uid 參數.
1.app.js 入口頁面
設置session 的uid
app.use(session({
secret: 'bitiancanshu',
// 以下是選填參數,但是不填會提示警告 start
resave: false,
saveUninitialized: false,
// 設置connect.sid
name: 'luyao',
// 設置生命周期
cookie: { maxAge: 60000000 },
}))
2.index.js 前台頁面
當登錄成功時
if(user.password == md5(fields.password)){
// 登錄成功,寫入session;根據用戶的id存入session,如果為了以后方面,可以把用戶的一系列信息都存到里面,但是這樣就增加了session的存儲容量。其實這種也可以解決,比如h5的本地存儲
req.session.uid = user._id;
res.render('commen/success',{msg:'恭喜您,登錄成功',time:3000,url:'/admin'});
} else {
res.render('commen/error', { msg: '對不起,密碼錯誤,請核對后重新輸入', time: 3000, url: '/login' });
}
3.app.js 攔截的第一張方法,相對復雜,下面有簡單方法
// 攔截
app.use(function(req, res, next) {
var url = req.url;
// 判斷不攔截的路由 出/login和/之外的都攔截
if (url != '/login' && !req.session.uid && url != '/') {
console.log('跳轉到登錄頁');
res.render('commen/error', { msg: '對不起,請登錄個人信息,否則無法進入后台管理頁面', time: 3000, url: '/login' });
return;
}
next();
});
*****************************注意*****************************
引入路由規則,一定要在中間件和設置session的后面,否則無效,切記
app.use('/', indexRouter);
app.use('/', adminRouter);
3.1 攔截的另一種方法,更簡單
設置一個中間件的js文件
// middlewares/login.js
module.exports = function(req,res,next){
var url = req.url;
if (!req.session.uid) {
res.render('commen/error', { msg: '對不起,請登錄個人信息,否則無法進入后台管理頁面', time: 3000, url: '/login' });
return;
}
next();
}
在app.js中導入,全局中間件
var login = require('./middlewares/login');
app.use('/', indexRouter);
// 攔截,上面是不需要攔截的路由規則,下面是需要攔截的路由規則
app.use(login);
app.use('/', adminRouter);
這樣就可以攔截了后台頁面,而不攔截index.js中定義的所有前台頁面