express-session不保存在本地,但在生产中工作



所以我正在运行一个node.js后端与react前端,并且由于某种原因与此设置:

app.use(session({
store: new MongoStore({
mongooseConnection: mongoose.connection
}),
secret: process.env.SECRET_KEY,
resave: false,
saveUninitialized: false,
cookie: {
maxAge: 1000 * 60 * 60 * 24 * 7 * 2, // two weeks
secure: false,
httpOnly: false,
}
}));

保存用户名使用:req.session.username = username;这确实保存,但当我试图在另一个页面上检查会话时,用户名就不见了。

完整源代码:https://github.com/CTF-Cafe/CTF_Cafe/tree/master/backEnd

PS:它在生产中完全可以工作,但在本地我尝试了httponly false和secure false。没有变化。

感谢任何帮助

当你从你的后端服务你的前端会话将工作,因为它有相同的起源。但是,对于您的本地环境,您将在不同的端口上运行React应用程序,Express应用程序也将不同。当一个端口不同时,它已经被认为是不同的来源和cookie,会话将不会被共享。

你可以通过节点应用代理你的前端,这样你就可以有相同的起源,你的会话将保持。

const proxy = require('express-http-proxy');
const app = express();
...
// Add after your routes
app.use(proxy('http://127.0.0.1:3000')); // assuming your Reacts runs on P3000

也检查一下这个答案。

最新更新