nodejs中间件拦截,express不登录无法进入后台页面
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中定义的所有前台页面
奋斗就是每天很难,可是一年一年却越来越容易;
不奋斗就是每天很容易,可是一年一年却越来越难。