有没有办法用connect的会话中间件来控制会话何时开始?
例如,如果我有express app config:
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, ... }));
});
然后在 every 请求时,如果没有给出会话cookie,则启动会话。如果我只想在用户通过身份验证后才启动会话,该怎么办?
例如,假设我有两条路由/protected
和/login
。
- 如果有人在没有会话cookie的情况下点击
/protected
,中间件将不启动新的会话。(req.session
是null
) - 如果有人使用会话cookie命中
/protected
,中间件将检查以查看是否存在与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
}
});
}
有没有什么方法可以用现有的连接会话中间件来实现这一点?
2条答案
按热度按时间1qczuiv01#
你要做的是删除这一行:
现在默认情况下会话是禁用的,由您决定哪个控制器将使用它们:
7cjasjjr2#
即使每次都启动一个会话,也没有什么关系,因为它将是空的。如果您试图使用它来验证访问(看起来确实如此),最简单的解决方案是在会话中设置一个属性(例如req.session.authenticated = true;),并检查一下。这种方式技术上的任何访问者都有一个会话,但是你只会利用会话,如果req.session.authenticated == true.这可能不是你想要的,但这是最简单的方法。