express使用session实现登录身份认证

一、添加session-file-store
npm install –save express-session

把session保存到session文件中
npm install –save session-file-store

或者把session保存到mongodb中
npm install –save connect-mongo

或者保存到redis缓存中
npm install –save connect-redis

二、在app.js中添加引用

var session = require('express-session');
var FileStore = require('session-file-store')(session);

或者

var MongoStore = require('connect-mongo')(session);// 引入mongo用来保存session

或者

var RedisStrore = require('connect-redis')(session);

三、在app.js中添加使用中间件

app.use(session({
    name: config.sessionId,
    secret: config.sessionSecret,  // 用来对session id相关的cookie进行签名
    store: new FileStore(),  // 本地存储session(文本文件,也可以选择其他store,比如redis或者mongodb)
    saveUninitialized: true,  // 是否自动保存未初始化的会话,一定是true
    resave: false,  // 是否每次都重新保存会话,建议false
    cookie: {
        maxAge: 10 * 1000  // 有效期,单位是毫秒
    }
}));

或者用mongodb

app.use(session({
    name: config.sessionId,
    secret: config.sessionSecret,  // 用来对session id相关的cookie进行签名
    store: new MongoStore({ //创建新的mongodb数据库
        url: config.url, //比如:'mongodb://cha:root@localhost:27017/ch_db'
        collection: config.sessionCollection //比如:'ch_sessions'
    }),
    saveUninitialized: true,  // 是否自动保存未初始化的会话,这里一定是true
    resave: false,  // 是否每次都重新保存会话,建议false
    cookie: {
        maxAge: 24*60*60*1000  // 有效期,单位是毫秒
    }
}));

或者使用redis

app.use(session({
    name: config.sessionId,
    secret: config.sessionSecret,  // 用来对session id相关的cookie进行签名
    store: new RedisStrore({
   "host" : "192.168.0.13",
   "port" : "6379",
   "pass" : "123456",
   "db" : 1,
   "ttl" : 1800,
   "logErrors" : true
    }),
    saveUninitialized: true,  // 是否自动保存未初始化的会话,这里一定是true
    resave: false,  // 是否每次都重新保存会话,建议false
    cookie: {
        maxAge: 24*60*60*1000  // 有效期,单位是毫秒
    }
}));

四、在app.js所有use路由中间件之前,添加一个登录验证中间件:

app.use(function(req, res, next) {
//不是登录页面或者登录页面的请求,并且session中没有身份验证信息
    if(req.path.indexOf('/login')<0 && !req.session.user){
        return res.redirect('login');//跳转到登录页面
    }else{
        next();//继续往下走
    }
});
//这里是登录用的中间件,
app.use('/login', login);
app.use('/login/*', login);
....//这里是其它所有的中间件

五、req.session.user = user.name; //登录成功后添加session

delete req.session.user;//退出时删除保存的user

//res.clearCookie(sessionId);//退出系统时清空cookie

你可能感兴趣的:(express使用session实现登录身份认证)