首页 > 解决方案 > 如何在整个应用程序中使用会话变量

问题描述

我想访问在不同路径上的 mysql 查询中进一步登录后分配的会话变量。但是,当我这样做时,我收到的是“未定义”值。这是我的登录脚本。

users.post('/login', (req, res) => {
  User.findOne({
    where: {
      email: req.body.email
    }
  })
    .then(user => {
      if (user) {
        if (bcrypt.compareSync(req.body.password, user.password)) {
          let token = jwt.sign(user.dataValues, process.env.SECRET_KEY, {
            expiresIn: 1440
          })
          req.session.Osoba=user.Osoba
          res.send(token)
        }
      } else {
        res.status(400).json({ error: 'Taki użytkownik nie istnieje' })
      }
    })
    .catch(err => {
      res.status(400).json({ error: err })
    })
})

这是会话中间件(它实际上位于主节点文件的开头,就在需要所有包之后和任何路由之前):

app.use(session({
  secret: 'secret',
  resave: false,
  saveUninitialized: true,
  cookie: { secure: true }
}))

这是给我未定义的行。

app.get('/wypozyczanie', async (req, res) => {
    if (req.session) {console.log(req.session.Osoba)}
  })

标签: node.jsexpressexpress-session

解决方案


试试你的会话中间件,如下所示。

app.use(session({
    key: 'sess_key',
    secret: 'secret',
    saveUninitialized: true,
    resave: true,
    rolling: true,
    cookie: {
        expires: 3600000, //1 hour. Sewt as you want
        secure: false
    }
}));

确保在使用之前分配 req.session.Osoba。


推荐阅读