在express-session中保存数据:res.render()vs res.send()

问题描述 投票:0回答:2

每一个人。我有关于会话管理的问题。

这是我的“快速会话”配置(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',可以重定向到'dashboard'页面:

<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

问候!

node.js express express-session
2个回答
1
投票

我的第一意见是使用为您处理sessionChecker的passportjs。

也许你必须改变resave并在这里保存未初始化

app.use(session({
  key: 'session_cookie_name',
  secret: 'session_cookie_secret',
  resave: false,
  saveUninitialized: false
}));

0
投票

谢谢@Shadow,只需添加“关键”参数即可!

© www.soinside.com 2019 - 2024. All rights reserved.