>我有一个简单的登录表单,可以在登录成功后设置会话
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)
时,它返回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('/');
}
});
有人看到我在这里做错了什么吗?可能还值得注意的是,它确实在 /
中返回了正确的值。
事实证明它不起作用,因为我将cookie.secure
设置为 true
.但这仅适用于 https 站点,尽管我正在本地主机上对此进行测试。所以解决方案就像设置secure: false
一样简单。