Express + Passport:req.user 每次保存代码时重置
Express + Passport: req.user resets on every code save
每当我保存新代码时,我的 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);
});
});
知道为什么会这样吗?我该如何解决这个问题?
如果我没理解错的话,你在你的应用程序代码中做了一些事情,然后你发现你丢失了会话?
默认会话存储是内存。当您在代码中执行某些操作时,您必须重新启动应用程序(或者您使用其他应用程序来执行此操作(nodemon、forever 等))。当您重新启动应用程序时,应用程序内存是干净的。因此你的会话丢失了。
您可以将会话存储在文件或数据库中:
redis 数据库示例(来自文档的代码):
安装 https://www.npmjs.com/package/connect-redis
然后在应用程序中:
var session = require('express-session');
var RedisStore = require('connect-redis')(session);
app.use(session({
store: new RedisStore(options),
secret: 'keyboard cat'
}));
每当我保存新代码时,我的 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);
});
});
知道为什么会这样吗?我该如何解决这个问题?
如果我没理解错的话,你在你的应用程序代码中做了一些事情,然后你发现你丢失了会话? 默认会话存储是内存。当您在代码中执行某些操作时,您必须重新启动应用程序(或者您使用其他应用程序来执行此操作(nodemon、forever 等))。当您重新启动应用程序时,应用程序内存是干净的。因此你的会话丢失了。 您可以将会话存储在文件或数据库中: redis 数据库示例(来自文档的代码): 安装 https://www.npmjs.com/package/connect-redis 然后在应用程序中:
var session = require('express-session');
var RedisStore = require('connect-redis')(session);
app.use(session({
store: new RedisStore(options),
secret: 'keyboard cat'
}));