Экспресс-сессия случайным образом переключается на другой пользовательский сеанс на сайте. - PullRequest
0 голосов
/ 16 апреля 2019

Мы столкнулись с самой странной ошибкой в ​​приложении Express, которое мы разрабатываем. Только изредка (например, 1 из 100) пользовательский сеанс случайным образом переключается на другой пользовательский сеанс при обновлении страницы. Например, если вы вошли в систему как Джейн Доу, вы обновили страницу и теперь вы Питер Смит. Мы заметили, что переключение всегда происходит с другим пользовательским сеансом, в настоящее время зарегистрированным на этом сервере, а не только с любым пользователем.

Ниже приведен код, который мы используем, надеясь, что у кого-то есть какие-либо предложения.

Версии модуля:

  • "экспресс": "4.16.4"
  • «паспорт»: «0,4,0»
  • "redis": "2.8.0"
  • "экспресс-сессия": "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 });
});

Заранее спасибо!

...