版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
在有登录的项目中,需要配置拦截器器,以防止别人在未登录的状态想去操作你的系统,在node.js中中间件Express其实就是一个拦截器,通过配置可以实现登录拦截。
一、设置session:在app.js中引入session模块:
var session = require('express-session');
然后设置session的有效期:
app.use(cookieParser('xxx'));
app.use(session({
secret: 'xxx',
resave: true,
saveUninitialized: true,
cookie: {
maxAge: 1000 * 60 * 60 * 24 //有效期一天
}
}));
上面的‘secret’可以自己定义,他是用来和cookie解密用的,好像就想一把钥匙一样,当然cookie也需要和这个一样,我的理解是这样的,不知道对不对。
二、配置登录拦截:
/**
* 设置中间件,监控在该拦截器后面的所有请求
* || arr[1] === 'stylesheets' || arr[1] === 'javascripts' || arr[1] === 'images' || arr[1] === 'upload'
* 将公共目录的文件放在拦截器之前,防止拦截public中的文件,以至于无法加载白名单中的public中的文件,js、css、image
*/
/**
* 拦截器
*/
app.use(function (req, res, next) {
var logger = log4js.getLogger("intercept");
if (req.session.user) {
//用户登录过
next();
} else {
//解析用户请求路径
var arr = req.url.split('/');
logger.info('请求路径拆分:' + JSON.stringify(arr));
//去除get请求携带的参数
for (var i = 0; i < arr.length; i++) {
arr[i] = arr[i].split('?')[0];
}
if (arr.length > 1) {
if (arr[1] === 'adminlogin' || arr[1] === 'adminlogout' || arr[1] === 'login_commit'||arr[1] === 'video') {
next();
} else {
logger.error('intercept:用户未登录执行登录拦截,路径为:' + arr[1]);
res.redirect('/adminlogin'); // 将用户重定向到登录页面
res.end();
}
}
}
});
具体的详细用法可以去我的网站www.wb233.cn 里面的这篇文章有详细用法,这个网站是用Node.js+Express写的。