【问题标题】:save data in express-session: res.render() vs res.send()在 express-session 中保存数据: res.render() vs res.send()
【发布时间】:2018-09-14 10:36:32
【问题描述】:

大家。我有关于会话管理的问题。

这是我的“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
    });
}

它显示带有“菜单”和其他链接的“主页”页面。一个链接有一个重定向到“dashboard”页面的“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.render 替换为 response.send 方法,就像这样:

response.send('login success!!!');

它向我显示带有文本的页面:“登录成功!!!”如果我(手动)在地址栏中写:'http://localhost:3000/dashboard',则变量 req.session.username 存在于 sessionChecker 方法中....

关于 express-session 中的配置或其他能够持久保存 'username' 的替代方案有什么建议吗?

附加信息: 节点版本: 8.9.3, 速成版: 4.13.1, 快速会话版本: 1.15.6

问候!

【问题讨论】:

    标签: node.js express express-session


    【解决方案1】:

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

    也许你必须在这里更改 resave 和 saveUninitialized

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

    【讨论】:

      【解决方案2】:

      谢谢@Shadow,只需添加“key”参数就可以了!!!

      【讨论】:

        猜你喜欢
        • 2020-05-21
        • 1970-01-01
        • 2019-06-28
        • 1970-01-01
        • 2020-07-13
        • 2018-06-30
        • 1970-01-01
        • 2015-03-13
        • 2016-11-12
        相关资源
        最近更新 更多