node.js - 如何在整个应用程序中使用会话变量
问题描述
我想访问在不同路径上的 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)}
})
解决方案
试试你的会话中间件,如下所示。
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。
推荐阅读
- nuxt.js - 如何根据nuxt中的特定页面更改标题中的项目
- formatting - GLSL 有哪些格式化工具可用?
- javascript - 使用 aws lambda 作为 s3 的无服务器输入清理代理
- javascript - Shamir 的阈值秘密共享方案的 Javscript 实现:share()
- windows - 仅为单个用户编辑 Windows 资源管理器上下文菜单
- php - 如何使用 sql 和 php 从数据库中选择 html 返回值
- php - 可变金额的 PayPal 付款按钮
- swift5 - 导航回特定的视图控制器类
- vimeo - Vimeo 上传错误
- reactjs - material-ui CSS 已应用,但在 DOM 中找不到