Мы столкнулись с самой странной ошибкой в приложении 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 });
});
Заранее спасибо!