为什么我的 express-session 变量 return 'undefined' 在不同的路线上?
Why does my express-session variable return 'undefined' on a different route?
我有一个简单的登录表单,它在登录成功后设置一个会话
router.post('/', (req, res) => {
const { username, password } = req.body;
// TODO: Hash password
if (username === 'admin' && password === 'test') {
req.session.user = username;
res.redirect('/dashboard');
} else {
// TODO: Validation
}
});
在此之前我设置了中间件:
router.use(sessions({
secret: 'supersecret',
resave: false,
saveUninitialized: false,
cookie: {
sameSite: true,
secure: true,
expires: false
}
}));
设置 session.user
后,路由器重定向到 /dashboard
,但是当我尝试 console.log(req.session.user)
时,它 returns undefined
,虽然req.session
没有。
router.get('/dashboard', (req, res) => {
console.log(req.session.user);
if (req.session.user) {
Product.find({}, (e, products) => {
if (e) console.error(e);
res.render('dashboard', {
products: products
});
});
} else {
res.redirect('/');
}
});
有人看到我做错了什么了吗?可能还值得注意的是,它 return 在 /
.
中的正确值
原来它不起作用,因为我将 cookie.secure
设置为 true
。但这只适用于 https 站点,尽管我正在我的本地主机上测试它。所以解决方案就像设置 secure: false
.
一样简单
我有一个简单的登录表单,它在登录成功后设置一个会话
router.post('/', (req, res) => {
const { username, password } = req.body;
// TODO: Hash password
if (username === 'admin' && password === 'test') {
req.session.user = username;
res.redirect('/dashboard');
} else {
// TODO: Validation
}
});
在此之前我设置了中间件:
router.use(sessions({
secret: 'supersecret',
resave: false,
saveUninitialized: false,
cookie: {
sameSite: true,
secure: true,
expires: false
}
}));
设置 session.user
后,路由器重定向到 /dashboard
,但是当我尝试 console.log(req.session.user)
时,它 returns undefined
,虽然req.session
没有。
router.get('/dashboard', (req, res) => {
console.log(req.session.user);
if (req.session.user) {
Product.find({}, (e, products) => {
if (e) console.error(e);
res.render('dashboard', {
products: products
});
});
} else {
res.redirect('/');
}
});
有人看到我做错了什么了吗?可能还值得注意的是,它 return 在 /
.
原来它不起作用,因为我将 cookie.secure
设置为 true
。但这只适用于 https 站点,尽管我正在我的本地主机上测试它。所以解决方案就像设置 secure: false
.