快速会话随机切换到站点上的另一个用户会话

时间:2019-04-16 13:19:16

标签: node.js express passport.js express-session

我们正在开发的Express应用程序正在遇到最奇怪的错误。仅偶尔(如100个中的1个),用户会话会在页面刷新时随机切换到另一个用户会话。就像,如果您以Jane Doe的身份登录,则刷新页面后,现在您是Peter Smith。我们注意到,切换总是发生在该服务器上当前登录的另一个用户会话上,而不仅仅是任何用户。

下面是一些我们正在使用的代码,希望那里的人有任何建议。

模块版本:

  • “表达”:“ 4.16.4”
  • “护照”:“ 0.4.0”
  • “ redis”:“ 2.8.0”
  • “ express-session”:“ 1.15.6”
  • “ connect-redis”:“ 3.4.1”

会话存储的代码:

const RedisStore = require('connect-redis')(session);

app.use(session({
  genid: () => {
    return uuidv1()
  },
  store: new RedisStore({
    host: getRedisHost(),
    port: getRedisPort(),
  }),
  secret: "...",
  resave: false,
  saveUninitialized: false
}));

护照本地策略:

passport.use(new LocalStrategy(async (username, password, done) => {
  const result = await login(username, password);
  if (result.success) {
    const user = await getUserDetails(result.token);
    done(null, {
      token: result.token,
      data: result.user
    });
  } else {
    done(null, false, { error_message: result.message });
  }
}));

序列化和反序列化的代码:

passport.serializeUser((user, done) => {
  done(null, {
    token: user.token,
    data: user.data
  });
});

passport.deserializeUser((user, done) => {
  done(null, { auth: user });
});

谢谢!

0 个答案:

没有答案