控制会话启动快速连接中间件

ral*_*hie 7 session connect node.js express

有没有办法控制会话何时以connect的会话中间件启动?

例如,如果我有快递app配置:

var app = express();
app.configure(function(){
  app.use(express.bodyParser());
  app.use(express.methodOverride());
  app.use(express.cookieParser('secret'));
  app.use(express.session({ store:sessionStore, ... }));
});
Run Code Online (Sandbox Code Playgroud)

然后在每个请求上,如果没有给出会话cookie,则启动会话.如果我只想在用户通过身份验证后才启动会话,该怎么办?

例如,假设我有两个途径/protected/login.

  • 如果有人在/protected没有会话cookie的情况下命中,则中间件将不会启动新会话.(req.sessionnull)
  • 如果某人遇到/protected会话cookie,中间件将检查是否存在与cookie匹配的活动会话并设置req.session,但不会启动新会话.(req.session可能有价值或是null)
  • 如果有人/login使用正确的参数进行命中,则会明确启动会话,然后才会设置cookie.

启动会话的唯一方法应该是明确的:

app.post('/login', function(req, res, next) {
  // connect to database and validate user...
  db.authenticate( req.body.user, req.body.pass, function(allow) {
    if (allow) {
      // START SESSION HERE
      // this will send set the cookie
    }
  });
}
Run Code Online (Sandbox Code Playgroud)

有没有办法用现有的连接会话中间件完成这个?

Nic*_*son 0

即使每次都启动一个会话,也没关系,因为它会是空的。如果您尝试使用它来验证访问权限(似乎是这种情况),最简单的解决方案是在会话中设置一个属性(例如 req.session.authenticated = true;),然后进行检查。这样,从技术上讲,每个访问者都有一个会话,但是只有在 req.session.authenticated == true 时,您才会使用该会话。它可能不完全是您正在寻找的,但这是完成此任务的最简单方法。