PassportJS会话混合起来

在ExpressJS应用程序中,当推送到生产服务器时,护照会话随机混合。 随机,即使我没有注销我的会话,该页面也可以加载另一个用户的视图。 如果不做其他事情,另一个更新会使我回到我自己的账户(也是随机的)。

我们的两个Web应用程序发生这种现象,这两个应用程序是由两个单独的用户按照其网站上的Passport指南编码的。 这两个networking应用程序都使用Facebook连接/ API。

这发生在Redis和File会话存储上。 我看到一篇关于使用全局variables的文章 :我们确定只使用本地作用域。

有什么我们做错了?

更新v1

在一个应用程序中,我们为Passport的serialize / deserialize实现了以下内容:

passport.serializeUser(function(user, done) { done(null, user); }); passport.deserializeUser(function(obj, done) { done(null, obj); }); 

另一方面,我们也试过:

 passport.serializeUser(function (user, done) { done(null, user); }); passport.deserializeUser(function(user, done) { User .where({id: user.id}) .fetch() .then(function (user) { done(null, user); }, function (err) { done(err, user); }); }); 

无论哪种方式,该应用程序仍然有其会议混合起来。

更新v2只有当多个用户login到服务器并同时使用时才会发生此错误。 当只有一个人使用该系统时不会发生这种情况。

更新v3看来,这个问题可能是由Amazon AWS导致的,因为一些“错误的用户”页面请求根本没有到达NodeJS应用程序(通过console.log进行validation)。

这个问题似乎是由ExpressJS而不是PassportJS会话导致的caching。

我们发现ExpressJS在生产模式下将设置view cache设置为true。 通过使用app.disable('view cache'); 在app.js中,我们禁用caching,似乎已经解决了这个问题。