为什么我的快速会话变量在不同的路由上返回'undefined'?



>我有一个简单的登录表单,可以在登录成功后设置会话

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一样简单。

最新更新