В нашем приложении 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
).