航线上的一个子集激活Express.js会议(Express.js sessions activat

2019-06-26 12:26发布

我与expressjs工作,但需要使用会话的登录验证用户身份。 该网站/应用一方面应允许用户浏览和无国籍网页让这些网页的缓存调查不同的产品和信息,而应在另一方面具备的功能,让用户登录和访问不同的内容使用会话收购。

因此,对于我的路由的子集我想会话状态激活,而互补的子集(我的路线的其余部分)表示会议应停用,使这些页面的缓存。

我怎样才能做到这一点在一个干净的方式?

说出路线,我想激活会话“/ KJ%C3%B8p”,“/的Bibliotek”和“/注册”。

我想是这样

app.configure(function(){
  app.set('views', __dirname + '/views');
  app.set('view engine', 'jade');

  var pageName = 'somepage';
  var oneYear = 1000*60*60*24*365;
  app.use(express.bodyParser());
  app.use('/kj%C3%B8p', express.cookieParser());
  app.use('/kj%C3%B8p', express.session({key: pageName, secret: 'someCode', store: new RedisStore, cookie: {path:'/', maxAge: (5*oneYear), httpOnly: true}}));
  app.use('/bibliotek', express.cookieParser());
  app.use('/bibliotek', express.session({key: pageName, secret: 'someCode', store: new RedisStore, cookie: {path: '/', maxAge: (5*oneYear), httpOnly: true}}));
  app.use('/registrer', express.cookieParser());
  app.use('/registrer', express.session({key: pageName, secret: 'someCode', store: new RedisStore, cookie: {path:'/', maxAge: (5*oneYear), httpOnly: true}}));

  app.use(express.methodOverride());
  app.use(app.router);
  app.use(express.static(__dirname + '/public'));

});

但这种再生每个三条航线的会话对象,并显得相当凌乱。 有小费吗?

Answer 1:

您可以在函数中的黑色或白名单中某些URL包装中间件。 这是一个白名单例如:

function allow(paths, fn) {
  return function(req, res, next) {
    if (~paths.indexOf(req.url)) {
      return fn(req, res, next);
    }
    next();
  }
}

你环绕你的中间件,如:

app.use(allow(['/bibliotek', '/registrer'], express.cookieParser()));

您可以使用其他中间件相同的技术也是如此。 这是基于一个要点是,快递笔者在IRC显示。



文章来源: Express.js sessions activated on a subset of routes