我们正在开发的Express应用程序正在遇到最奇怪的错误。仅偶尔(如100个中的1个),用户会话会在页面刷新时随机切换到另一个用户会话。就像,如果您以Jane Doe的身份登录,则刷新页面后,现在您是Peter Smith。我们注意到,切换总是发生在该服务器上当前登录的另一个用户会话上,而不仅仅是任何用户。
下面是一些我们正在使用的代码,希望那里的人有任何建议。
模块版本:
会话存储的代码:
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 });
});
谢谢!