每当我保存新代码时,我的req.user
都会在我的Express应用中重置。
我正在使用Twitter策略,以下是我如何安装我的护照中间件:
app.use(cookieParser('secret'));
app.use(session({
secret: 'secret',
resave: false,
saveUninitialized: true
}));
app.use(passport.initialize());
app.use(passport.session());
这是序列化和反序列化逻辑:
passport.serializeUser(function (user, done) {
done(null, user._id);
});
passport.deserializeUser(function (id, done) {
User.findById(id, function (err, user) {
done(err, user);
});
});
知道为什么会这样吗?我该如何解决这个问题?
答案 0 :(得分:0)
如果我理解正确,你在你的应用程序代码中做了一些事情,然后你注意到你丢失了会话? 默认会话存储是内存。当您在代码中执行某些操作时,必须重新启动应用程序(或者使用其他应用程序执行此操作(nodemon,永远等))。当你重新启动应用程序时,应用程序内存是干净的。因此,您的会话将丢失。 您可以在文件或数据库中存储会话: 使用redis db的示例(文档中的代码): 安装https://www.npmjs.com/package/connect-redis 然后在app:
var session = require('express-session');
var RedisStore = require('connect-redis')(session);
app.use(session({
store: new RedisStore(options),
secret: 'keyboard cat'
}));