使用connect-mongo为NodeJS项目添加会话session

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将不会被存入。

以上代码是涉及到的部分代码,若有词不达意、错误地方还请多多指教
个人博客:
进击的程序茗

你可能感兴趣的:(使用connect-mongo为NodeJS项目添加会话session)