node.js - 在 express-session 中保存数据: res.render() vs res.send()
问题描述
大家。我有一个关于会话管理的问题。
这是我的“快速会话”配置(app.js):
app.use(session({
secret: "I love pizza...",
resave: true,
saveUninitialized: true
}));
当用户登录时,我在req.session中存储一些“属性”,如下所示(controller.js):
exports.login = function (request, response) {
request.session.username = 'admin';
response.render('pages/home', {
title: "home",
username: request.session.username
});
}
它向我显示带有“菜单”和其他链接的“主页”页面。一个链接有一个重定向到“仪表板”页面的“href”:
<a class="nav-link active d-flex align-items-center nav-link-2"
href="/dashboard">
<span>Dashboard</span>
</a>
它在routes.js中路由:
function sessionChecker (req, res, next) {
if (req.session && req.session.username) {
next();
} else {
res.redirect('/login');
}
};
app.get('/dashboard', sessionChecker, home.evaluacion_dash);
好吧,问题是sessionChecker方法,变量req.session.username不存在。
另一方面,如果我用 response.send 方法替换response.render ,如下所示:
response.send('login success!!!');
它向我显示带有文本的页面:“登录成功!!!” 如果我(手动)在地址栏中写:' http://localhost:3000/dashboard ',则变量req.session.username存在于sessionChecker方法中......
关于快速会话中的配置或其他能够保留“用户名”的替代方案有什么建议吗?
附加信息: 节点版本: 8.9.3, 快速版本: 4.13.1, 快速会话版本: 1.15.6
问候!
解决方案
我的第一个意见是使用为您处理 sessionChecker 的 passportjs。
也许你必须在这里更改 resave 和 saveUninitialized
app.use(session({
key: 'session_cookie_name',
secret: 'session_cookie_secret',
resave: false,
saveUninitialized: false
}));
推荐阅读
- ionic-framework - ionic 5 - 路由到带有页面 id 问题的详细信息页面
- python - 如何从 python 中的 CSV 文件打印特定字段?
- powershell - 强制导入值为整数
- rest - 从两个不同的 http 端点获取数据的最佳做法是什么?
- javascript - 从打字稿中的数组中删除重复项
- r - R:将数据框列中的空字符串替换为“0”会导致所有列值都替换为“0”
- java - 我想在午夜值中添加小时数以根据我的时区显示目的地时间
- java - 使用 gluon Charm 模块化项目时出错:可从多个模块访问包 com.gluonhq.charm.down.plugins
- excel - Excel VBA:无法在函数(不是子函数)内设置范围值?
- python - 在动态表单django中添加多个项目