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

时间:2018-09-13 03:53:15

标签: node.js express express-session

大家。我对会话管理有疑问。

这是我的“ express-session”配置(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 ”,则 sessionChecker 中存在变量 req.session.username >方法。...

关于在快速会话中进行配置的任何建议或其他能够持久保存'用户名'的建议?

其他信息: 节点版本::8.9.3, 正式版: 4.13.1, express-session版本: 1.15.6

致谢!

1 个答案:

答案 0 :(得分:1)

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

也许您必须在此处更改resave和saveUninitialized

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