Сессия PassportJS

В нашем приложении ExpressJS, при нажатии на производственный сервер, сеанс паспорта в случайном порядке смешивается. Случайно страница может загружать представление другого пользователя, даже когда я не вышел из сеанса. Не делая ничего другого, другое обновление вернет меня к моей учетной записи (тоже случайно).

Это явление происходит с двумя нашими веб-приложениями, закодированными двумя отдельными пользователями, следуя инструкциям Passport на их веб-сайте. Оба веб-приложения используют Facebook connect/API.

Это происходит как в хранилищах сеансов Redis, так и в файлах. Я видел сообщение об использовании глобальных переменных: мы уверены, что мы используем только локальную область.

Есть ли что-то, что мы делаем неправильно?

Обновление v1

В одном приложении мы выполнили следующее для сериализации/десериализации для паспорта:

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 Эта ошибка возникает только при одновременном использовании нескольких пользователей на сервере и одновременном использовании. Это не происходит, если только 1 человек использует систему.

Обновить v3 Похоже, что проблема может быть вызвана Amazon AWS, поскольку некоторые из запросов страницы "неправильного пользователя" вообще не доходят до приложения NodeJS (проверено console.log).

Ответы

Ответ 1

Проблема заключается в кэшировании, вызванном ExpressJS, а не сеансом PassportJS.

Мы выяснили, что ExpressJS устанавливает для параметра view cache значение true в режиме prodution. Используя app.disable('view cache'); в app.js, мы отключили кеш и, похоже, решили проблему.