作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用expressjs,并希望使用 session 对用户登录进行身份验证。站点/应用程序一方面应允许用户在无状态网页中浏览和调查不同的产品和信息,从而允许缓存这些页面,但另一方面应具有让用户登录和访问使用 session 获取的不同内容的功能.
因此,对于我的路由子集,我希望激活 session 状态,而对于补充子集(我的路由的其余部分),应停用快速 session ,从而允许缓存这些页面。
我怎样才能以干净的方式做到这一点?
假设我要激活 session 的路由是“/kj%C3%B8p”、“/bibliotek”和“/register”。
我尝试过类似的事情
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'));
});
但这会为三个路由中的每一个重新生成 session 对象,并且看起来很困惑。有什么建议吗?
最佳答案
您可以将中间件包装在函数中以将某些网址列入黑名单或白名单。这是一个白名单示例:
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()));
您也可以对其他中间件使用相同的技术。这是基于gist明确作者在 irc 中显示的内容。
关于session - 在路由子集上激活的 Express.js session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11650489/
我是一名优秀的程序员,十分优秀!