【发布时间】:2014-03-05 22:47:25
【问题描述】:
问题如下:在部署的 nodejitsu 应用程序上,通常(不总是!),当我从浏览器重定向(点击 aa href="/logout")到 /logout 路由时,我得到一个 req.该路由中未定义会话。
app.get('/logout', function(req, res){
log.debug("session", req.session); //undefined
});
请求通过以下“中间件”堆栈:
var store = new db.store({client: db.client}); // no problems here, redis monitor confirms
app.configure(function(){
[...]
app.use(express.cookieParser("XXXpassXXX"));
app.use(express.bodyParser());
app.use(express.session({
secret: "XXXpassXXX",
store: store
}));
app.use(function(req, res, next) {
var fullURL = req.protocol + "://" + req.get('host') + req.url;
if (fullURL.indexOf("logout") != -1 || fullURL[fullURL.length-1] == "/") {
log.debug(fullURL);
log.debug("sesiune", JSON.stringify(req.session)); // undefined for the "/logout" route !!!
log.debug("cookies", JSON.stringify(req.cookies));
}
next();
});
app.use(passport.session());
app.use(app.router);
});
我检查了浏览器并将 cookie 发送到服务器,在我的“记录器”中间件中,我可以看到 fullURL 设置正确。
此外,应用程序在失败之前对 redis 数据库的最后一次查询是在正确的会话 ID 上获取“sess:xxx”(正确存储在数据库中)。
在 express.session() 使用 connect-redis 作为存储提交到 next() 中间件之后,鉴于 session 存储在redis 数据库并对其执行“获取”?
PS:在本地服务器上,使用本地 redis 实例,一切正常。
【问题讨论】:
标签: node.js session express connect passport.js