【问题标题】:How to save data in expressjs/session NodeJS如何在 expressjs/session NodeJS 中保存数据
【发布时间】:2017-04-12 07:30:28
【问题描述】:

我有 3 个文件:app.js、index.js(路由)、Users.js(控制器)

一旦我的用户登录(在 POST 信息和 DB 之间完成验证),我想使用 expressjs/session 将数据保存在会话中。

这是我在 app.js 中的会话声明:

var session = require('express-session');

    app.use(session({
        resave: true,
        saveUninitialized: true,
        secret: 'trolololo'
    }));

这是我的路线:

router.post('/login', function(req, res, next) {
    Users.login(req, res);
});

router.get('/getSessionInfos', function(req,res,next){
    console.log(req.session);
});

这里是登录控制器:

login : function(req, res){
        var formEmail = req.body.email;
        var formPassword = req.body.password;

        User.findOne({ where: {email: formEmail} }).then(function(user) {
            if(user){
              if (user.password == formPassword){
                  console.log('User connected');
                  req.session.email = formEmail;
                  req.session.password = formPassword;
                  console.log(req.session);
                  res.status(200).send('User Authentified');
              }else{
                  res.status(401).send('Invalid Password');
              }
          }else{
              res.status(401).send('Username');
          }
        });
    },

登录工作我得到 200 状态,登录功能中的 console.log 显示一个带有我的信息的功能。但是当我尝试从 /getSessionInfos URL 获取我的会话时,它是空的......请发送帮助

【问题讨论】:

  • /getSessionInfos 中的全部代码吗?你只输出到控制台,你不返回任何东西
  • 好吧,我假设从 expressjs/session 文档中始终通过 req.session.something 获取会话,正如我所说,我得到了会话对象,但它是空的。但是是的,这就是 /getSessionInfos 中的全部内容

标签: javascript node.js session express request


【解决方案1】:

我知道你没有问这个问题,但我还是会这样说,不再建议在节点中使用会话,json Web 令牌几乎是王座。本质上,它是 JSON 格式的签名数据.因为它已签名,所以收件人可以验证其真实性。因为它是 JSON,所以它的权重很小。

简单来说,JWT 很酷,因为您不需要在服务器上保存会话数据来验证用户身份。

  • 用户调用认证服务,通常发送用户名和 密码。
    • 身份验证服务以签名的 JWT 进行响应,其中说明了谁 用户是。
    • 用户请求访问发送回令牌的安全服务。
    • 安全层检查令牌上的签名以及它是否真实 已授予访问权限。

你可以在 npm 中使用 jwt-simple。

【讨论】:

    【解决方案2】:

    您的代码似乎正确,只有一些更改

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

    不要忘记先登录,因为您在那里存储会话值,然后它肯定会显示带有电子邮件和密码密钥的对象。 如果您遇到任何问题,请告诉我。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-18
      • 2018-06-30
      • 2014-05-03
      • 1970-01-01
      • 1970-01-01
      • 2014-01-19
      • 2019-10-28
      • 2018-01-11
      相关资源
      最近更新 更多