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将不会被存入。
以上代码是涉及到的部分代码,若有词不达意、错误地方还请多多指教