PassportJS会话混乱

mau*_*ris 15 session node.js express passport-facebook passport.js

在我们的ExpressJS应用程序中,当推送到生产服务器时,护照会话会随机混淆.随机地,即使我没有退出会话,页面也可以加载另一个用户的视图.没有做任何其他事情,另一次刷新会让我回到我自己的帐户(也随机).

这种现象发生在我们的两个Web应用程序中,这些应用程序由两个独立用户按照其网站上的Passport指南编码.这两个网络应用都使用Facebook连接/ API.

这在Redis和File会话存储上都会发生.我看到一篇关于使用全局变量的帖子:我们确信我们只使用局部范围.

有什么我们做错了吗?

更新v1

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

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

passport.deserializeUser(function(obj, done) {
    done(null, obj);
});
Run Code Online (Sandbox Code Playgroud)

另一方面,我们也尝试过:

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);
    });
});
Run Code Online (Sandbox Code Playgroud)

无论哪种方式,应用仍然会使其会话混乱.

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

更新v3 似乎问题可能是由Amazon AWS引起的,因为一些"错误的用户"页面请求根本没有到达NodeJS应用程序(经过验证console.log).

mau*_*ris 4

该问题似乎是由 ExpressJS 引起的缓存,而不是 PassportJS 会话。

我们发现 ExpressJSview cache在生产中将设置设置为 true。通过app.disable('view cache');在 app.js 中使用,我们禁用了缓存,似乎已经解决了问题。