如何在 expressjs/session NodeJS 中保存数据



我有3个文件:app.js,index.js(routes(,Users.js(controller(

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

这是我在应用程序中的会话声明.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 状态和我的控制台.log在登录功能中显示一个包含我信息的功能。但是当我尝试从/getSessionInfos URL 获取我的会话时,它是空的......请发送帮助

我知道你没有问这个,但无论如何我都会说明,不再建议在节点中使用会话,json Web 令牌几乎是王位。从本质上讲,它是一段 JSON 格式的签名数据。因为它是签名的,所以收件人可以验证其真实性。因为它是JSON,所以它的权重很小。

简单来说,JWT 很酷,因为您无需将会话数据保留在服务器上即可对用户进行身份验证。

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

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

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

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

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

最新更新